Javascript 将节点列表视为数组的正确方法?
好的,所以我知道使用document.querySelectorAll(节点列表)结果的“正确”方法的传统智慧是使用以下方法将其转换为数组:Javascript 将节点列表视为数组的正确方法?,javascript,arrays,nodelist,Javascript,Arrays,Nodelist,好的,所以我知道使用document.querySelectorAll(节点列表)结果的“正确”方法的传统智慧是使用以下方法将其转换为数组: Array.prototype.slice.call(elements) 但是,我一直在尝试将它们直接用作类似阵列的对象,它似乎在以下结构中起作用: document.querySelectorAll('selector').forEach(elem => console.log(elem.tagName)); 我的问题是,使用这种更方便的语法是
Array.prototype.slice.call(elements)
但是,我一直在尝试将它们直接用作类似阵列的对象,它似乎在以下结构中起作用:
document.querySelectorAll('selector').forEach(elem => console.log(elem.tagName));
我的问题是,使用这种更方便的语法是否会产生意想不到的后果
虽然NodeList
不是数组
,但可以使用forEach()对其进行迭代。还可以使用Array.from()
将其转换为真实的数组
但是,一些较旧的浏览器没有实现NodeList.forEach()
或Array.from()
。使用Array.prototype.forEach()
可以避免这种情况-请参阅本文档的示例
---
除IE之外的所有浏览器都支持所有其他方法。因此使用起来有点安全
节点列表实现:
- [属性]长度-与数组相同。长度
[方法]项目-列表。项目(5)==列表[5]
[方法]forEach-与数组相同。forEach
NodeList
不是数组
,但可以使用forEach()对其进行迭代。还可以使用Array.from()
将其转换为真实的数组
但是,一些较旧的浏览器没有实现NodeList.forEach()
或Array.from()
。使用Array.prototype.forEach()
可以避免这种情况-请参阅本文档的示例
---
除IE之外的所有浏览器都支持所有其他方法。因此使用起来有点安全
节点列表实现:
- [属性]长度-与数组相同。长度
[方法]项目-列表。项目(5)==列表[5]
[方法]forEach-与数组相同。forEach
根据规范,
querySelectorAll
返回一个NodeList
,它只保证有它的元素和length
属性。所以,即使你的浏览器支持这一点,这也不是一个好主意。如果要寻找更方便的语法,可以使用数组。从或扩展运算符:
Array.from(document.querySelectorAll('selector')).forEach()
[…document.querySelectorAll('selector')].forEach()
根据规范,querySelectorAll
返回一个NodeList
,它只保证有它的元素和length
属性。所以,即使你的浏览器支持这一点,这也不是一个好主意。如果要寻找更方便的语法,可以使用数组。从或扩展运算符:
Array.from(document.querySelectorAll('selector')).forEach()
[…document.querySelectorAll('selector')].forEach()
如果您的浏览器支持它,就可以了;并非所有人都这样做。您可以添加for IE。如果您的浏览器支持它,就可以了;并非所有人都这样做。对于NodeList.prototype.forEach()
。