2

可能重复:
CodeMash 2012 的“Wat”演讲中提到的这些奇怪的 JavaScript 行为的解释是什么?

我对 JavaScript 很陌生。我有这样的代码:

<script type="text/javascript">
console.log( []  + {} );
</script>

在我的 Google chrome 浏览器日志中:

[object Object]

它看起来对我来说是有线的!并做这样的事情:

<script type="text/javascript">
console.log( {} + {} );
</script>

确实产生:

[object Object][object Object]

在这两种情况下,这里到底发生了什么?怎么会[]{}将这两个结果相加成一个数组objects

提前致谢。

4

3 回答 3

11

当您将+运算符与非数字一起使用时,您正在执行字符串连接,因此操作数将转换为字符串。一个空数组变成一个空字符串,因为它是对 的隐式调用join,并且没有条目,join返回一个空字符串;一个对象变成"[object Object]".

所以

console.log( [] + {} );

...归结为

console.log( String([]) + String({}) );

...归结为

console.log( "" + "[object Object]");
于 2012-05-05T12:45:25.950 回答
2

您正在将对象添加到数组 - 所以它被放在最后。当您对 2 个对象应用 + 时,唯一有意义的操作是将其转换为字符串并将其连接起来

于 2012-05-05T12:45:53.933 回答
1

[]是一个空数组,它被转换为一个字符串(因为连接运算符)。{}是一个空对象。

于 2012-05-05T12:47:28.273 回答