美文网首页
JS 中的 [] + {} === 0 与 {} + [] ==

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

作者: 花似幻想 | 来源:发表于2018-07-07 02:21 被阅读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 ,原因: {} 被解释为对象

相关文章

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

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

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

    原文链接:https://www.jianshu.com/p/7c2a1c98b557[https://www.j...

  • 2019-04-07

    JS中关于if(xx)与a==b的判断 if(xx)的判断 1.if(number) 当if中是number为+0...

  • js 中的 void 0

    在很多源码中的 constant.js 文件中,会发现const UNDEFINED = void 0。 为什么不...

  • 常用的数据处理方法

    数据处理方法 js中的逻辑 true :1; js中的逻辑 false : 0 “” null NaN Array...

  • js如何区分+0与-0

    常见的场景 javascript中的 0 值判断有许多坑,比如当你判断一个对象中某个key是否有值,你可能会这样写...

  • 正则表达式

    主要是研究js中,正则的使用。 量词 /w{3}/{3, 6}{3, }? = {0, 1} = {0, } = ...

  • 纪念js中的那些坑

    0X01 js 中不存在块级作用域 0X02 js中存在一个特性-变量提升(Hoisting),变量的声明都将会被...

  • ~运算符

    这是js中的一元操作符:按位取反。 ~~true == 1~~false == 0~~"" == 0~~[] ==...

  • 小程序中三级联动选择框

    页面部分: JS部分,首先在data 中定义初始的mutilIdex为[0,0,0],定义picker中当前第一列...

网友评论

      本文标题:JS 中的 [] + {} === 0 与 {} + [] ==

      本文链接:https://www.haomeiwen.com/subject/equiuftx.html