一种语言是否通常将undefined评估为等于false? 如果是这样,为什么这样做?

更新:问题仍未得到答复。 @Alastair_Pitts:除非我遗漏了什么,否则这是一个两部分问题。 第二部分,“如果是这样,为什么要这样做?” 并没有得到回答。


相信问题很清楚,但如果您有任何问题 – 请告诉我。 谢谢!

undefined = unknown ,是基于三元逻辑的系统引用。


参考: http //en.wikipedia.org/wiki/Ternary_logic

在许多(如果不是大多数)语言中,语言值要么是假的,要么意味着某些东西不存在或缺乏价值,或者是真实的,意味着某些东西存在或具有价值。 虚假值列表通常是:(这些评估为false)

  1. 0(零,数字)
  2. ”(空字符串)
  3. null(如果此值存在)
  4. undefined(如果此值存在)
  5. false / False(如果它有布尔类型)

其他任何事情都是真实的,并且评估为真。

编辑:使答案有点偏向于JavaScript

我认为答案是否定的,大多数语言都不认为“undefined”与false相同。 当然,了解语言的细节以了解它如何处理truefalseNULL (或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 。