我正在使用forEach循环一个nodeList。我的代码如下
var array = document.querySelectorAll('items');
array.forEach(function (item) {
console.log(item);
});
此代码引发错误为
未捕获的TypeError:Array.Foreach不是函数
[].forEach.call(array, (function (item) {
console.log(item);
}));
然而,一些较旧的浏览器还没有实现nodelist.foreach()和array.from()。但是这些限制可以通过使用array.prototype.foreach()来规避(本文档中有更多内容)。
参考:MDN
这是JavaScript中的一个基本内容:您可以从一个对象中获取函数并应用于任何其他对象。也就是说:用this
设置为应用函数的对象来调用它。这是可能的,因为在JavaScript中,所有的属性名等都是由名称标识的。因此,尽管nodelist.length
与array.length
不同,但函数array.foreach
可以应用于任何公开length
属性的东西(以及foreach
需要的其他东西)。
所以在你的情况下发生的是:
QuerySelectorAll()
返回一个NodeList类型的对象,该对象碰巧公开Length
属性,并且是可枚举的(假设它可以由[]
操作符访问);NodeList不公开foreach
函数(您可以在这里看到:https://developer.mozilla.org/en-美国/docs/web/api/NodeList)-这就是为什么不能直接对queryselectorall()
foreach
[].foreach
返回一个函数-对于array.prototype.foreach
[].foreach.call(array,…)
将此函数应用到array
引用的对象上,使用array
调用NodeList类型的对象(即foreach
调用函数体中的this
,因此当在foreach
中有this.length
时,它引用array
中的length
而不 foreach
使用了Array和NodeList的共同属性;如果foreach
想使用Array具有的某些属性,但NodeList没有问题内容: 假设我有这个SQL查询: 如果我尝试执行此操作,则会收到一条错误消息,提示“ ISNULL附近的语法不正确”。我知道这是ISNULL的正确语法。为什么不能在CONTAINS语句内部调用ISNULL? 问题答案: 试试这个: 当您尝试将表达式放入存储过程调用时,这是相同的问题: CONTAIN需要字符串文字,请参见CONTAINS(Transact-SQL)
我对学习java中的方法还不熟悉。在python中,使用“函数”很容易,但我最近了解到java没有类似的功能。我有一个方法,应该返回n1和n2中的最低值。我在公共静态int函数的行中得到一个错误。。。 但语法似乎没有任何问题。
问题内容: 我有一个expressjs应用程序,在特定的路由上,我调用了一个函数,该函数通过使用数据库文档作为参数来响应数据库中的用户。我使用基于promise的库,并且想在将数据库文档放入响应中的回调内联。但是当我这样做时程序会失败。有人可以解释为什么吗?我还想知道为什么内联调用才能真正起作用。两种方法和之间有一些根本区别吗? 这是一个有效和无效的示例。假定返回用户文档的承诺。 问题答案: 像这
问题内容: 我不是从情节提要中使用a ,而是要有一个自定义函数,可以在其中传递某些对象的。我只想像在Objective- C中一样打电话。像这样: 但是我收到以下编译器错误: 必须调用超类UIViewController的指定初始化程序 我可以不再这样做吗? 问题答案: 对于指定的初始化器是。您应该打电话给它。 参见http://www.bignerdranch.com/blog/real-iph
我使用Python 3.7、JRE 8、JDK 1.8在Eclipse(Eclipse plugins:PyDev)上安装了带有Hadoop2.6的Pysark2.1。 在scala.collection.maplike$class.default(maplike.scala:228) 在scala.collection.abstractmap.default(map.scala:59) 在sca
问题内容: 我正在尝试使用方法两次读取给定文件的内容。奇怪的是,当我第二次调用它时,似乎没有将文件内容作为字符串返回? 这是代码 当然我知道这不是最有效或最好的方法,这不是重点。关键是,为什么我不能调用两次?我需要重置文件句柄吗?或者关闭/重新打开文件以执行此操作? 问题答案: 调用read()将读取整个文件,并将读取的游标留在文件的末尾(仅读取其他内容)。如果你希望一次阅读一定数量的行,则可以使