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

kub*_*uba 16 javascript

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

{} + []
Run Code Online (Sandbox Code Playgroud)

你会得到0,但是当你打字的时候

console.log({} + [])
Run Code Online (Sandbox Code Playgroud)

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

Que*_*tin 12

{}可以是空或空对象文字,具体取决于上下文.

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

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

您不能将块作为函数参数,因此第二个代码示例{}是一个对象,代码意味着"使用数组Concatinate一个对象"(隐式地将对象和数组转换为字符串).

  • {aa:"www"}可能被解释为标签 (3认同)
  • @Fran - 这意味着它总是将它视为一个块. (2认同)

Mih*_*nut 5

当您{}在开头看到字符时,它被解释为空文本blockempty对象文字(当您创建对象时).

当您使用expression语句时,+表示加号运算符,coerces其操作数(在本例中为将[])表示数字.

所以+[]是相同的Number([]),其评估为0.

unary plus运营商内部使用的ToNumber抽象操作.

阅读有关类型转换运算符的更多信息.

换句话说,{} + []表达式是一个empty代码块,后面跟着array一个数字(Number[])的约束.

在第二个示例中,您只向数据提供了concat一个对象文字(空对象).这就是你收到的原因[object Object].