{} + [] - 为什么它是0或[对象对象]?

时间:2017-10-11 08:27:54

标签: javascript

如果您在浏览器中打开JS控制台(在我的情况下是Chrome)并输入:

{} + []

你会得到0,但是当你输入

console.log({} + [])

你得到[object Object] ...为什么结果不同的任何想法?我一直以为当你在那里打字时总是用console.log包装它?

4 个答案:

答案 0 :(得分:11)

{}可以是空的,也可以是空的对象文字,具体取决于上下文。

+可以是一元加运算符,也可以是连接运算符,具体取决于上下文。

第一个代码示例是一个空块,它可能也不存在,使表达式与+[]相同,意思是“空数组转换为数字”。

你不能把一个块作为一个函数参数,所以第二个代码示例{}是一个对象,代码的意思是“用一个数组来传递一个对象”(隐式地将对象和数组转换为字符串)

答案 1 :(得分:5)

当您在开头看到{}字符时,它会被解释为空的blockempty对象字面值(当您创建对象时)。

当您使用expression语句时,+代表加号运算符,coerces其操作数(在这种情况下它将是{ {1}})到数字

因此[]+[]相同,后者的计算结果为0.

Number([]) unary运算符在内部使用plus抽象操作。

详细了解Type Conversionsoperators

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