【发布时间】:2013-04-17 22:16:06
【问题描述】:
有人向我指出了有关在 javascript 中添加空数组的一些有趣的事情,但我不知道为什么它会以这种方式工作。
添加空数组会产生一个字符串。
换句话说,[] + [] 返回""
我启动了我的控制台来测试它,果然,它可以工作。我进一步发现,这种行为不仅限于空数组。数字、字符串、数组和对象的数组在添加到任何其他数组时都会变成字符串。一些例子是:
[1] + [] //returns "1"
[1] + [2] //returns "12"
[1,2,3] + [2] //returns "1,2,32"
[{foo:'bar'},'foo','bar'] + [] //returns "[object Object],foo,bar"
当添加到其他对象时,它也会发生在其他对象上,但前提是对象位于右侧。如果它在左侧,则对象变为0。
'foo' + {foo:'bar'} //returns "foo[object Object]"
1 + {foo:'bar'} //returns "1[object Object]"
{foo:'bar'} + 1 //returns 1
{foo:'bar'} + 'foo' //returns NaN
除非我将对象分配给变量,否则会发生这种情况。如果我使用X = {foo:'bar'},
X + 'foo' //returns "[object Object]foo"
对象又变回了字符串。
我可以理解为什么在== 运算符中可能会发生这种类型的转换,但是为什么加法会这样做呢?为什么加法会将数组和对象(是的,我知道数组也是对象)变成其他东西?
【问题讨论】:
-
因为这就是 JavaScript 所做的。这就是(松散还是弱?)打字。
-
您的家庭作业或工作是否有实际问题?这不是一个真正的论坛。
-
我同意“这就是 JavaScript”的作用。然而,这绝对不是松散类型,它只是 JavaScript 固有的怪癖:)
-
“为什么”关于语言行为的问题超出了本网站的范围。也许语言开发人员可以提供对他们思维方式的洞察,但我们这些凡人必须简单地认识并解释这种行为。
-
JavaScript 类型强制可以做很多事情来产生不直观的结果,我最近学到了很多这方面的知识:stackoverflow.com/questions/15978204/…
标签: javascript