JavaScript循环:for…in与for
我在Javascript中遇到了奇怪的行为。我懂了
“对象不支持此属性或方法”
removeAttribute
以下代码中的函数异常:
var buttons = controlDiv.getElementsByTagName("button");for ( var button in buttons )
button.removeAttribute('disabled');
当我使用以下代码更改代码时,问题消失了:
var buttons = controlDiv.getElementsByTagName("button");for ( var i = 0; i < buttons.length; i++ )
buttons[i].removeAttribute('disabled');
button
inside的值是for...in
多少?
回答:
回答:
重要的是要了解,[]
用于访问索引的Javascript数组的方括号语法()实际上是从Object
… 继承的。
obj.prop === obj['prop'] // true
该for..in
结构不能像for..each/in
其他语言(php,python等)中所看到的那样更传统。
Javascript for..in
旨在迭代的属性。产生每个属性的。结合使用此和Object
的方括号语法,您可以轻松访问所需的值。
var obj = { foo: "bar",
fizz: "buzz",
moo: "muck"
};
for ( var prop in obj ) {
console.log(prop); // foo / fizz / moo
console.log(obj[prop]); // bar / buzz / muck
}
并且由于数组只是具有 的对象,因此其for..in
工作方式类似,因此产生数字索引的方式与生成上面的属性名称相同。
该for..in
结构的一个重要特征是,它将继续在原型链中寻找可枚举的属性。它还将迭代
。您有责任验证当前属性是否直接存在于本地对象上,而不是它所附加的原型是否存在于本地对象上hasOwnProperty()
。
for ( var prop in obj ) { if ( obj.hasOwnProperty(prop) ) {
// prop is actually obj's property (not inherited)
}
}
for..in
在Array类型上使用结构的问题在于,无法保证生成属性的顺序…通常来说,这在处理数组时至关重要。
另一个问题是它通常比标准for
实现慢。
回答:
使用a for...in
来迭代数组就像使用螺丝刀的the子来钉钉子…为什么不只用锤子(for
)?
以上是 JavaScript循环:for…in与for 的全部内容, 来源链接: utcz.com/qa/410329.html