翻转操作数时,添加带有空对象的空数组会产生不同的结果
Adding empty array with empty object yields different results when flipping operands
描述我的问题的最佳方式是举例说明:
# node v4.3.1
> {} + []
0
> [] + {}
'[object Object]'
> [] + {} === {} + []
true
我设法找到了加里·伯恩哈特(Gary Bernhardt)的WAT演讲,其中提到了幽默主义方法中的相同行为但可悲的是没有解释。
此外,相等比较和相同性文档也无助于理解行为。
在Firefox中发现了相同的行为,所以我想这应该是这样的,但是为什么呢?这是怎么回事,为什么翻转操作数会改变结果?更重要的是,为什么在我们看到它们的返回值不同时,测试两个表达式的严格相等总是产生 true?
案例 {} + []
:
JavaScript 认为{}
是一个空的块语句,只是被忽略了。然后+ []
-> + ''
-> + 0
-> 0
.
空块语句以这种方式转换为对象文字:({})
,因此固定版本应为:({}) + []
。
案例[] + {}
:
[] + {}
-> '' + '[object Object]'
-> "[object Object]"
.
案例[] + {} === {} + []
:
[] + {} === {} + []
-> '' + '[object Object]' === '[object Object]' + ''
-> '[object Object]' === '[object Object]'
-> true
通知:
- 使用
toString()
方法将数组转换为基元值,这实际上是一个join(',')
。[]
转换为具有[].join(',')
->''
的基元 - 常规
Object
也使用toString()
转换为基元值,默认情况下返回[object Object]
-
<value> + <value2>
运算符尝试将其操作数转换为基元值。然后尝试连接转换的结果 -
+ <value>
运算符将运算符转换为基元值,则结果将转换为number
阅读有关加法和相等运算符的更多信息。
相关文章:
- knex:根据结果创建数组的合适方法是什么
- Mongodb$in以与数组中相同的顺序获取结果
- 使用ScriptObjectMirror将数组结果从JavaScript转换为有用的东西
- 从重复的javascript数组结果集中只获取一行
- 如何从合并的结果集中提取数组
- JSON返回数组的奇怪结果
- JavaScript-将for循环的多个结果推送到数组中
- 从source-mirth检索通道目标中的数组结果
- json_encode 的 mysqli 查询奇怪的数组结果
- 茉莉花期望不匹配数组结果
- 用promise处理promise的数组结果
- 根据id表将单个数组结果发送到打印机
- 如何获得Javascript数组结果到Java
- 显示输入文本的数组结果
- Javascript删除数组结果留下一个逗号
- 如何推翻数组结果树从子-父到父-子在Javascript
- 将数组结果过滤到下拉列表中
- Javascript数组结果返回undefined
- Javascript:标记数组结果
- 如何将数组结果视为数组Javascript