【发布时间】:2015-06-09 09:21:41
【问题描述】:
我正在尝试将 arguments 对象与另一个数组连接,我编写了如下代码:
[].concat.call(arguments, newArray)
但它返回[ [object Arguments], ... ],这完全不是我想要的。我用谷歌搜索并找到了一些解释为什么我可以通过 slice 方法做到这一点:How can I convert the "arguments" object to an array in JavaScript?
但是在查阅了规范之后,我在 concat 方法上发现了相同的定义:
注意
concat函数是故意通用的;它不要求它的 this 值是一个 Array 对象。因此,它可以转移到其他类型的对象中用作方法。concat函数能否成功应用于宿主对象取决于实现。
规格在这里:http://es5.github.io/#x15.4.4.4
所以现在我很困惑为什么我不能通过concat 方法将arguments 对象转换为数组。
【问题讨论】:
-
“我写了这样的代码”
newArray是什么? -
查看步骤 5b 和 5c。这就是为什么。注释似乎与算法有所不同。但注释显然是非正式的。
-
这是另一个数组,例如
[ 1, 2, 3 ]。 -
这在 ES6 中有所改变(至少在理论上):: people.mozilla.org/~jorendorff/…
-
@T.J.Crowder:这就是我添加“理论上”的原因。至少它不再将其限制为数组,除非数组是唯一实现该属性的东西:-/很可能是,现在我正在考虑它,因为改变它会破坏向后兼容性?跨度>
标签: javascript arrays arguments