We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Learn more about funding links in repositories.
Report abuse
There was an error while loading. Please reload this page.
第92天 解释下为什么{} + [] === 0为true?
{} + [] === 0
那个 {} 是空语句块而非空对象
{}
{} + [] === 0 +[] === 0 0 === 0 true
先运算,后比较 {} + [] == 0; 0 === 0
{} + [] == 0; 0 === 0
因为 +[] 为0, 而{}是空的, 所以 0 === 0;
加法运算符会触发三种类型转换:
所以,这应该涉及到了隐式转换 那么是如何转换的呢? 这个过程涉及到将对象转换为原始值(undefined,null,boolean,number,string) 参考 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive 尝试干扰转换原始值的过程验证 console.log({[Symbol.toPrimitive](hint) {return "object";}} + []) //object
console.log({[Symbol.toPrimitive](hint) {return "object";}} + []) //object
一开始以为{}不是代码块,但是这么多人说是代码块,为什么,求解
{} 认定是语法块 这个放在前面,只有混淆作用,并不参与运算。 +[] 类型转换 0 0===0; 不再赘述
{ }被解释为代码块,不参与计算 所以 +[ ] === 0; 但是如果写成 [ ] + { } 则结果为 "[object Object]" 详细介绍: https://www.cnblogs.com/MasterYao/p/7783004.html
{} + {} => '[object Object][object Object]' {} + [] => 0 如果{}被当做代码块解析了,那么结果应该如下 +{} => '[object Object]' +[] => 0 语句一与结果不符 语句二倒是能解析的通 现在我就看你们怎么解释
{} + {} => '[object Object][object Object]'
{} + [] => 0
+{} => '[object Object]'
+[] => 0
是false
• 假
因为console.log的()把{}解析成一个对象了
let a = {} + [] a === 0 false
这个不用我多说,大家应该都清楚啥意思了吧
{} + [] == [] + {}
({} + [] == [] + {})
{} + [] === 0 {} 在这表示代码块 +[] ==> +"" ==> 0
那个 {} 是空语句块而非空对象 {} + [] === 0 +[] === 0 0 === 0 true
Activity
ghost commentedon Jul 16, 2019
那个
{}
是空语句块而非空对象NicholasBaiYa commentedon Jul 17, 2019
先运算,后比较
{} + [] == 0; 0 === 0
nowherebutup commentedon Jul 17, 2019
因为 +[] 为0,
而{}是空的,
所以 0 === 0;
[-][js] 第92天 解释下为什么`{} + [] === 0`为true?[/-][+][js] 第92天 解释下为什么{} + [] === 0为true?[/+]tonyChenHey commentedon Jul 17, 2019
加法运算符会触发三种类型转换:
所以,这应该涉及到了隐式转换
那么是如何转换的呢?
这个过程涉及到将对象转换为原始值(undefined,null,boolean,number,string)
参考
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive
尝试干扰转换原始值的过程验证
console.log({[Symbol.toPrimitive](hint) {return "object";}} + []) //object
一开始以为{}不是代码块,但是这么多人说是代码块,为什么,求解
MoveZZG commentedon Jul 17, 2019
{} 认定是语法块
这个放在前面,只有混淆作用,并不参与运算。
+[] 类型转换 0
0===0;
不再赘述
DarthVaderrr commentedon Jul 17, 2019
{ }被解释为代码块,不参与计算 所以 +[ ] === 0;
但是如果写成 [ ] + { } 则结果为 "[object Object]"
详细介绍:
https://www.cnblogs.com/MasterYao/p/7783004.html
134355 commentedon Jul 17, 2019
{} + {} => '[object Object][object Object]'
{} + [] => 0
如果{}被当做代码块解析了,那么结果应该如下
+{} => '[object Object]'
+[] => 0
语句一与结果不符
语句二倒是能解析的通
现在我就看你们怎么解释
liangchaofei commentedon Jul 18, 2019
是false
134355 commentedon Jul 19, 2019
zhangsan08 commentedon Jul 19, 2019
因为console.log的()把{}解析成一个对象了
MRMrmRmrrighty commentedon Oct 23, 2020
let a = {} + []
a === 0
false
maxthonl commentedon Oct 30, 2020
这个不用我多说,大家应该都清楚啥意思了吧
{} + [] == [] + {}
的结果 #4368({} + [] == [] + {})
的结果 #43721684838553 commentedon Dec 9, 2021
{} + [] === 0
{} 在这表示代码块
+[] ==> +"" ==> 0
xiaoqiangz commentedon Jun 23, 2022