当前位置: 首页 > 面试题库 >

JavaScript循环:for…in与for

訾高飞
2023-03-14
问题内容

我在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');

buttoninside的值是for...in多少?


问题答案:

不要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)?



 类似资料:
  • for ... in循环用于循环对象的属性。 以下是'for ... in'循环的语法。 for (variablename in object) { statement or block to execute } 在每次迭代中,来自对象的一个​​属性被分配给变量名称,并且此循环继续,直到对象的所有属性都用完为止。 例子 (Example) var obj = {a:1, b:2,

  • for ... in循环用于循环对象的属性。 以下是'for ... in'循环的语法。 for (variablename in object){ statement or block to execute } 在每次迭代中,来自对象的一个​​属性被分配给变量名称,并且此循环继续,直到对象的所有属性都用完为止。 例子 (Example) void main() { var

  • 和 in 操作符一样,for in 循环同样在查找对象属性时遍历原型链上的所有属性。 注意: for in 循环不会遍历那些 enumerable 设置为 false 的属性;比如数组的 length 属性。 // 修改 Object.prototype Object.prototype.bar = 1; var foo = {moo: 2}; for(var i in foo) { c

  • Swift 循环 Swift for-in 循环用于遍历一个集合里面的所有元素,例如由数字表示的区间、数组中的元素、字符串中的字符。 语法 Swift for-in 循环的语法格式如下: for index in var { 循环体 } 流程图: 实例 1 import Cocoa for index in 1...5 { print("\(index) 乘于 5 为:\(i

  • 问题内容: Javascript中的“ for…in”循环是否按声明的顺序遍历哈希表/元素?有没有按顺序执行的浏览器? 我希望使用的对象将被声明 一次, 并且永远不会被修改。 假设我有: 我进一步将它们用于: 我是否可以期望在大多数体面的浏览器中,“ A:“ Hello””总是排在“ B:“ World””之前? 问题答案: 当前,所有主流浏览器都按照定义它们的顺序遍历对象的属性。Chrome可以

  • 本文向大家介绍javascript中for/in循环及使用技巧,包括了javascript中for/in循环及使用技巧的使用技巧和注意事项,需要的朋友参考一下 JavaScript 支持不同类型的循环: for - 循环代码块一定的次数 for/in - 循环遍历对象的属性 while - 当指定的条件为 true 时循环指定的代码块 do/while - 同样当指定的条件为 true 时循环指定