【发布时间】:2017-02-09 08:40:23
【问题描述】:
我正在使用 Babel/ES6 构建一个应用程序。我想禁用它的仅查看版本的所有表单元素,所以我这样做了:
let form = document.getElementById('application-form')
let elements = form.elements
我希望能够做到这一点,而不是使用常规的旧 for 循环(确实有效):
elements.forEach((el) => {
el.disabled = true
})
但我得到了TypeError: elements.forEach is not a function
奇怪的是,如果我在 Chrome 开发控制台中console.log(elements),它就像一个包含一堆 input 对象的数组。它不会以 Object 符号显示对象,并且所有键都是整数。我认为这是某种伪数组,但我什至不知道如何找出它。
编辑:简短的回答它不是一个数组,它是一个 HTMLCollection。见Why doesn't nodelist have forEach?
*更新*
每个this answer,nodelist 现在有forEach 方法!
【问题讨论】:
-
和
console.log(typeof elements)的结果 -
花式解决方案:
[...elements].forEach -
object。但它看起来像开发控制台中的一个数组。看起来它实际上是一个 HTMLCollection -
总是检查类型...不要使用
duck testing(如果它看起来像鸭子,像鸭子一样游泳,像鸭子一样叫声,那么它可能是鸭子) -
@squint: "...当我的发动机处于高速运转状态时..." ROFL!我确定我不知道那是什么样的。
标签: javascript arrays ecmascript-6 babeljs