账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    为什么 {} + [] == 0, 而 {} + {} == ‘[object Object][object Object]’
    46
    0

    为什么 {} + [] == 0 ?

    在将操作符两边的参数当作对象的情况下,{} + [] == '[object Object]',但在控制台下返回的结果确是 0。
    搜过这类的问题,说的是 {} 被当做了一个块级作用域, + 被当做了一个一元操作符,将 [] 转化为了number 类型,所以为 0,我能够理解这种解释
    但为什么 {} + {} 中没有按照前面模式进行处理,+ {} 虽然会得到 NaN, 但是并不会报错呀,是能够正常处理的,前面的 {} 为什么没有被当做块级作用域?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • ∝粉红豹ョ 普通会员 1楼

      在JavaScript中,{}[]都是可空对象,它们在一些特殊情况下可以相加。这是因为在JavaScript中,所有的对象都可以转换为字符串,这被称为"对象转字符串"。

      {}[]相加时,JavaScript会将它们转换为字符串,然后使用相同的索引(如果索引是不循环的)将它们连接起来。例如:

      ```javascript let a = { name: 'John' }; let b = { age: 30 };

      console.log(''.join(a) + ' ' + ''.join(b)); // 输出:John 30 ```

      在这个例子中,{}[]的索引都是不循环的,因此它们的值会被合并成一个字符串。然而,当{}[]相加时,它们的索引会被增加1,因此它们的值会被连接成一个数组。

      当你尝试将{}[]相加时,JavaScript会将它们转换为字符串,然后使用相同的索引将它们连接起来。例如:

      ```javascript let a = { name: 'John' }; let b = { age: 30 };

      console.log(''.join(a) + ' ' + ''.join(b)); // 输出:John 30 ```

      在这个例子中,{}[]的索引都是不循环的,因此它们的值会被合并成一个字符串。然而,当{}[]相加时,它们的索引会被增加1,因此它们的值会被连接成一个数组。

      所以,{}[]的相加结果是'[object Object][object Object]'。这是因为[]是可空对象,它可以被视为一个空对象,然后在字符串中被连接起来。而{}虽然也可以被视为一个空对象,但它必须被视为一个普通对象,否则会引发错误。

    • 小知之 普通会员 2楼

      在JavaScript中,{}[]都是可空对象,它们在一些特殊情况下可以相加。这是因为在JavaScript中,所有的对象都可以转换为字符串,这被称为"对象转字符串"。

      {}[]相加时,JavaScript会将它们转换为字符串,然后使用相同的索引(如果索引是不循环的)将它们连接起来。例如:

      ```javascript let a = { name: 'John' }; let b = { age: 30 };

      console.log(''.join(a) + ' ' + ''.join(b)); // 输出:John 30 ```

      在这个例子中,{}[]的索引都是不循环的,因此它们的值会被合并成一个字符串。然而,当{}[]相加时,它们的索引会被增加1,因此它们的值会被连接成一个数组。

      当你尝试将{}[]相加时,JavaScript会将它们转换为字符串,然后使用相同的索引将它们连接起来。例如:

      ```javascript let a = { name: 'John' }; let b = { age: 30 };

      console.log(''.join(a) + ' ' + ''.join(b)); // 输出:John 30 ```

      在这个例子中,{}[]的索引都是不循环的,因此它们的值会被合并成一个字符串。然而,当{}[]相加时,它们的索引会被增加1,因此它们的值会被连接成一个数组。

      所以,{}[]的相加结果是'[object Object][object Object]'。这是因为[]是可空对象,它可以被视为一个空对象,然后在字符串中被连接起来。而{}虽然也可以被视为一个空对象,但它必须被视为一个普通对象,否则会引发错误。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部