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

标签 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) 的一项功能、有意为之还是一个错误?

最佳答案

这是 ['a'] 上默认 toString 行为导致 'a' 的结果。因此,[['a']].toString() also 结果为 'a'。在控制台中尝试一下应该可以清楚地表明这一点。如果数组有多个元素,您会看到差异,因为 ['a', 'b'].toString() 会产生 'a,b'

关于javascript - 为什么 Array.prototype.join() 会展平任意深度的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39843813/

相关文章:

c++ - 将 char[][] 转换为 char**

html - Chrome 在使用 CSS background-size :cover in scrolling background image 时滞后

android - WebGL:在 Android 上拒绝支持 OES_texture_float

javascript - TypeError : schema[sync ? 'validateSync' : 'validate' ] 不是函数

javascript - 在 Javascript 中循环遍历有限的颜色集以获取不确定的数据集

javascript - 计算 Kendo PanelBar 中的面板(项目)数量

javascript - 如何在循环内创建具有唯一变量名称的动态对象?

c - 在C中,如何对每个指针都指向可变长度int数组的指针数组进行排序?

javascript - jQuery 点击事件触发两次

css - Chrome 中的 float 错误?