Javascript Array.prototype.slice.call与Array.prototype.forEach.call

Javascript Array.prototype.slice.call与Array.prototype.forEach.call,javascript,nodelist,Javascript,Nodelist,关于Array.prototype.forEach.call(nodeList,fn): 以此方式将宿主对象(如节点列表)传递给本机方法 (例如forEach)不保证在所有浏览器中都能工作,并且 在某些方面被认为是失败的 然后建议Array.prototype.slice.call(nodeList)将节点列表转换为数组,但不给出任何警告 那么,当尝试在节点列表上使用forEach时,使用第二种方法(以便我以后可以在生成的数组上使用forEach)是否更安全,或者它们是在做同样的事情吗? 我目前

关于
Array.prototype.forEach.call(nodeList,fn)

以此方式将宿主对象(如节点列表)传递给本机方法 (例如forEach)不保证在所有浏览器中都能工作,并且 在某些方面被认为是失败的

然后建议
Array.prototype.slice.call(nodeList)
将节点列表转换为数组,但不给出任何警告

那么,当尝试在
节点列表
上使用
forEach
时,使用第二种方法(以便我以后可以在生成的数组上使用
forEach
)是否更安全,或者它们是在做同样的事情吗?

我目前认为两者都在做相同的事情:将宿主对象作为
this
传递给本机方法


我会对循环使用一个简单的
,但我正在尝试与新版本的JSLint兼容(另外,我认为
forEach实际上看起来相当漂亮)。

它们看起来确实不一致,首先警告不要使用数组操作,然后使用一个将节点列表转换为数组。但是后者已经成为了一个非常普遍的习惯用法,任何一个浏览器出现故障都会被杀掉。是的,这让我很困惑。因此,如果他们做的几乎是相同的事情,那么您的语句也将应用于第一种方法,对吗?:“任何失败的浏览器都将被击毙”。任何一个失败的浏览器都会是一个本机不支持forEach的浏览器?你知道如果有一个浏览器列表,在某个地方,这会失败吗?抱歉问了这么多问题,谢谢@Knu,我想这回答了我的最后一个问题,如果这是唯一一个失败的浏览器的话。主机对象有未定义的行为。