未定义的关于对象的行为

时间:2013-10-09 20:55:20

标签: javascript

所以我正在玩物体,我注意到对象a = {}

a.b == undefinedtrue

a.b === undefined也是true

然而 a.b === (undefined || 'c')false

有谁知道这种行为的原因是什么?

2 个答案:

答案 0 :(得分:9)

undefined || 'c'评估为'c',因此a.b === (undefined || 'c')相当于运行a.b === 'c',这显然是错误的。

以下是有关逻辑运算符的MDN文档供参考:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators

特别是:

  

运算符:逻辑OR(||)
  用法 expr1 || 表达式2
  说明:如果可以转换为true,则返回 expr1 ;否则,返回 expr2 。因此,当与布尔值一起使用时,||如果任一操作数为true,则返回true;如果两者都为假,则返回false。

如果是undefined || 'c',则undefined无法转换为true,因此'c'运算符会返回||

答案 1 :(得分:2)

a.b === (undefined || 'c')

a.b就像你提到的那样undefined

||或运算符将返回其左侧,如果它是真的;否则它将返回'右侧。

在这种情况下,(undefined || 'c')评估为'c',只留下a.b === 'c',这是假的。