我向我指出了一些有关在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"

对象又回到了字符串。

我可以理解为什么这种转换可能会在==运算符中发生,但是为什么加法会这样做呢? 为什么加法运算会将数组和对象(是的,我也知道数组也是对象)更改为其他东西?

===============>>#1 票数:5 已采纳

该运算符仅用于添加数字或连接字符串,如果您将其与其他类型一起使用,则根据情况将它们转换为数字或字符串(该部分实际上有点复杂...)。

根据语言规范

加法运算符执行字符串连接或数字加法。

至于为什么以这种方式设计语言,我们只能猜测,但是Shadow Creeper在他的回答中显示了一个合理的理由:每种不同类型的行为都有几种可能性,因此可能会造成混淆。

===============>>#2 票数:1

这称为类型强制,这就是JavaScript的编写方式。 我建议您阅读以下内容以获得清晰的图片: http : //blog.jeremymartin.name/2008/03/understanding-loose-typing-in.html

因此,应避免使用非类型安全的等式运算符,即==!= 您应尽可能使用===!==并强制进行类型转换( parseInt()等)。

===============>>#3 票数:1

试图执行([1,2,3] + [1,2,3])是模棱两可的。 它应该导致[1,2,3,1,2,3]或[2,4,6]还是字符串值“ [1,2,3] [1,2,3]”?

JavaScript尝试以其认为合理的方式转换事物。 有关此问题的说明,请参见http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/

  ask by ckersch translate from so

未解决问题?本站智能推荐: