一种语言是否通常将undefined评估为等于false? 如果是这样,为什么这样做?
更新:问题仍未得到答复。 @Alastair_Pitts:除非我遗漏了什么,否则这是一个两部分问题。 第二部分,“如果是这样,为什么要这样做?” 并没有得到回答。
相信问题很清楚,但如果您有任何问题 – 请告诉我。 谢谢!
undefined = unknown ,是基于三元逻辑的系统引用。
参考: http : //en.wikipedia.org/wiki/Ternary_logic
在许多(如果不是大多数)语言中,语言值要么是假的,要么意味着某些东西不存在或缺乏价值,或者是真实的,意味着某些东西存在或具有价值。 虚假值列表通常是:(这些评估为false)
- 0(零,数字)
- ”(空字符串)
- null(如果此值存在)
- undefined(如果此值存在)
- false / False(如果它有布尔类型)
其他任何事情都是真实的,并且评估为真。
编辑:使答案有点偏向于JavaScript
我认为答案是否定的,大多数语言都不认为“undefined”与false相同。 当然,了解语言的细节以了解它如何处理true
, false
, NULL
(或nil
)等非常重要。
你用Ruby标记了这个,所以这里有一些Ruby例子:
>> x # raises NameError: undefined local variable >> x = nil # initializes x and assigns the value nil >> x == true # false >> x == false # false (in Ruby nil is not false, but see below) >> x.nil? # true >> x ? true : false # false -- Ruby treats nil values as false in conditions >> x = 1 # now x has a value >> x.nil? # false >> x ? true : false # true
至于“为什么将undefined评估为false”,在使用它之前需要知道变量时,它可以很方便。 例如在Ruby中你经常会看到:
if x && x == "some interesting value" do_important_thing end
如果x
未定义,则条件的第一部分返回false并且语句短路。 哪个更清洁:
if x.nil? if x == "some interesting value" do_important_thing end end
我只是用Javascript来解决这个问题,当发生这种情况时,该值实际上是一个定义为’undefined’的字符串
如果您要对此进行测试:
if (someVar==true) { document.write('True'); } else if (someVar==false) { document.write('False'); } else { document.write('Other'); }
它将输出’Other’而不是true或false – 不知道这是否有帮助……
用“等于假”取决于你的意思。 PHP专门有两个不同的运算符。 你可以说value == false
意味着value是一个计算结果为false的标量,而value === false
表示它是未定义的。
同样,SQL具有NULL
,这是一个与0(或FALSE)无关的特殊值。
C / C ++实际上没有“未定义”的概念,只有“未初始化”,在这种情况下变量存在,但是它的值没有定义,如果你想让你的代码不吸,就不应该读取它。
在标量意义上(即如果你有一些值保存的东西),false通常被定义为“0”,而true则被定义为“非零”,但这并不是一个标准。
不必要!
这取决于你的意思是“未定义”。 如果你的意思是“未初始化”,那么答案是否定的。
在C或C ++中,假设有一个语句
int x;
在function范围。 执行语句后, x
是一个合法的整数变量,但它没有初始化。 x
可以取任何值。 如果它取值0
,那么它是false
; 对于所有其他值( 概率更高 ),这是true
。 但是,最后, x
实际获得的值无关紧要。 从程序正确性的角度来看,它是“ 未定义的行为” 。
虽然它不是由语言提供的,但也可以实现三态,例如真,假,未知。 例如,参见Boost tribool中的tribool 。