未定义相对于对象的行为
behavior of undefined with respect to objects
所以我在玩对象,我注意到对象a = {}
a.b == undefined
true
a.b === undefined
也是true
然而 a.b === (undefined || 'c')
false
有谁知道这种行为的原因是什么?
undefined || 'c'
计算结果为'c'
,所以a.b === (undefined || 'c')
等价于运行a.b === 'c'
,这显然是错误的。
以下是有关逻辑运算符的 MDN 文档以供参考:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators
特别:
运算符:逻辑或 (||(
用法: expr1 ||EXPR2
描述:如果可以转换为 true,则返回 expr1;否则,返回 expr2。因此,当与布尔值一起使用时,||如果任一操作数为真,则返回 true;如果两者都为假,则返回假。
在 undefined || 'c'
的情况下,undefined
不能转换为 true,因此'c'
由 ||
运算符返回。
a.b === (undefined || 'c')
a.b
就像你提到的undefined
。
如果为 true,则||
或运算符将返回其左侧;否则它将返回其右侧。
在这种情况下,(undefined || 'c')
计算结果为 'c'
,留下 a.b === 'c'
,这是假的。
相关文章:
- 如何获取相对于 HTML 页面的标记位置
- 使用return相对于this的优势
- positon元素相对于JS中的parent.part容器?没有绝对/固定的定位
- 获取一个元素相对于Javascript中一个祖先的位置
- Facebook PHP SDK相对于PhoneGap上的JS SDK的优势
- 相对于GoogleMaps/geoxml3解析器延迟Javascript函数的执行
- 文本相对于 SVG 中的父项 G 右对齐
- 检测 iOS 相对于 JavaScript 中主页按钮的方向
- 服务器端JavaScript相对于Java的优势
- node.js获取文件相对于project/src的路径
- jquery 相对于 href=“#” 删除显示块
- 如何使用选择器获取相对于element实例的元素
- 将Ember.js与Raphael.js结合使用:如何将Ember对象与Raphael对象相关联
- 在JSON for REST中,snake_case相对于camelCase的优势
- bind()相对于call()有什么用?我们可以用bind()做什么额外的事情,而用call()做不到
- 设置相对于“window.innerHeight”的高度无效
- 如何定义相对于kraken.js中的url的区域设置
- Javascript/html5 2d Canvas Context -获取相对于Canvas的X, Y(相对于转换对象
- 将文本相对于html画布对齐
- HTML5 Canvas -计算对象相对于'磁铁'的速度