如果您在浏览器中打开JS控制台(在我的情况下是Chrome)并输入:
{} + []
你会得到0,但是当你输入
console.log({} + [])
你得到[object Object] ...为什么结果不同的任何想法?我一直以为当你在那里打字时总是用console.log包装它?
答案 0 :(得分:11)
{}
可以是空的块,也可以是空的对象文字,具体取决于上下文。
+
可以是一元加运算符,也可以是连接运算符,具体取决于上下文。
第一个代码示例是一个空块,它可能也不存在,使表达式与+[]
相同,意思是“空数组转换为数字”。
你不能把一个块作为一个函数参数,所以第二个代码示例{}
是一个对象,代码的意思是“用一个数组来传递一个对象”(隐式地将对象和数组转换为字符串)
答案 1 :(得分:5)
当您在开头看到{}
字符时,它会被解释为空的block
或empty
对象字面值(当您创建对象时)。
当您使用expression
或语句时,+
代表加号运算符,coerces
其操作数(在这种情况下它将是{ {1}})到数字。
因此[]
与+[]
相同,后者的计算结果为0.
Number([])
unary
运算符在内部使用plus
抽象操作。
详细了解Type Conversions和operators。
ToNumber
换句话说,console.log(Number([]));
表达式是{} + []
代码块,后跟empty
,它将限制为一个数字{{1} })。
在第二个示例中,您只是向数组提供array
对象文字(空对象)。这就是你收到Number[]
的原因。
答案 2 :(得分:3)
{}
方法时, "[object Object]"
空对象会返回toString()
。调用其""
方法时,空数组返回toString()
。因此,console.log({} + [])
将输出"[object Object]"
答案 3 :(得分:0)
因为{}是一个对象符号所以无论你用{}连接它都会给你一个[object Object]。我的情况[]是空的,所以它只显示[对象]。所以如果你能尝试下面的话,你就会得到你想要的东西。
console.log({} + 5);
[object Object]5 ///console shows
//And
console.log({} + "test");
VM65:1 [object Object]test //console shows