为什么Array.prototype.join()会展平任何深度的数组?

时间:2016-10-04 03:44:20

标签: javascript arrays google-chrome join

乱搞一些JavaScript以及我认为应该产生的错误发生了按预期的方式解决。 [].join()似乎压扁了任何深度的嵌套数组。

var arr = [['a'], ['b'], ['c']];
arr.join('-'); // => 'a-b-c'

即使var arr = [['a'], [[[[[[[[['b']]]]]]]]], ['c']];也会返回与上面完全相同的结果。

这特别奇怪,因为它返回对象的预期(错误)行为:

var arr = [{}, {}, {}];
arr.join('-'); // => '[object Object]-[object Object]-[object Object]'

如果这是最新的chrome(53.0.2785.116),故意或错误的功能,我很好奇吗?

2 个答案:

答案 0 :(得分:1)

对于要连接的数组中的每个元素,首先发生的是元素被强制转换为字符串。像

这样的东西
[[[[["b"]]]]]

强制转换为字符串时只是

"b"

因此,当您进行连接时,组合元素将被强制为字符串,然后连接过程会将元素粘合在一起。

答案 1 :(得分:0)

这是toString['a']行为导致'a'的默认[['a']].toString()行为的结果。因此,'a' 会产生['a', 'b'].toString()。在控制台中玩这个应该清楚这一点。如果您的数组有多个元素,您会看到差异,因为'a,b'会产生{}