JS 中的 [] + {} === 0 与 {} + [] ==

2018-07-07  本文已影响0人  花似幻想

JS 中总是会出现一些看似不可理喻的现象,比方说
[] + {} === 0 结果为 false ,而 {} + [] === 0 的结果却为 true

只是换了一下 []{} 的位置呀,怎么会给出截然不同的结果呢?

  1. {} + [] === 0 结果为 true

JS 是一个脚本语言,这意味着当引擎面临 {} + [] === 0 时,它首先看到的是 {} ,此时, {} 既可以被解释成一个对象,也可以被解释成一个(空的)代码块。

在这里,如果 {} 被解释成一个对象的话,对象和数组相加会将两者都转换成字符串,而字符串显然与 0 类型不等。

因此,在 {} + [] === 0 中, {} 一定是被解释成了代码块,也就是说 {} 实际上并不是所谓的表达式的一部分,而 {} + [] === 0 也能被等价地转换为 + [] === 0 ,此时, [] 被转换为字符串 '' ,而一元加号又会将字符串 '' 转换为数字 0 ,很显然 0===0 结果为 true

  1. [] + {} === 0 结果为 false

在这里, {} 无法被解释成代码块,所以 {} 就是一个对象,而如之前所说,数组与对象相加的结果是一个字符串,字符串和 0 之间很显然类型不等,因此 [] + {} === 0 的结果就是 false

  1. 类推

({} + [] === 0) 结果为 false ,原因: {} 被解释为对象

上一篇 下一篇

猜你喜欢

热点阅读