Javascript中的“ for…in”循环是否按声明的顺序遍历哈希表/元素?有没有按顺序执行的浏览器?
我希望使用的对象将被声明 一次, 并且永远不会被修改。
假设我有:
var myObject = { A: "Hello", B: "World" };
我进一步将它们用于:
for (var item in myObject) alert(item + " : " + myObject[item]);
我是否可以期望在大多数体面的浏览器中,“ A:“ Hello””总是排在“ B:“ World””之前?
当前,所有主流浏览器都按照定义它们的顺序遍历对象的属性。Chrome可以做到这一点,除了少数情况。[…]
ECMAScript规范明确未定义此行为。在ECMA-262中,第12.6.4节:
枚举属性的机制……取决于实现。
但是,规范与实现完全不同。ECMAScript的所有现代实现都按照定义它们的顺序遍历对象属性。因此,Chrome小组认为这是一个错误,并将予以修复。
除了Chrome和Opera以外,所有浏览器都遵循定义顺序,而Chrome则对每个非数字属性名称都遵循。在这两种浏览器中,属性是按顺序拉到第一个非数字属性之前的(这与它们实现数组的方式有关)。顺序也相同Object.keys
。
此示例应清楚说明发生了什么:
var obj = {
"first":"first",
"2":"2",
"34":"34",
"1":"1",
"second":"second"
};
for (var i in obj) { console.log(i); };
// Order listed:
// "1"
// "2"
// "34"
// "first"
// "second"
它的技术性不如可能随时更改的事实重要。不要依赖保持这种状态的事物。
简而言之:如果顺序对您很重要,请使用数组。
问题内容: 我在Javascript中遇到了奇怪的行为。我懂了 “对象不支持此属性或方法” 以下代码中的函数异常: 当我使用以下代码更改代码时,问题消失了: inside的值是多少? 问题答案: 不要用于数组迭代。 重要的是要了解,用于访问索引的Javascript数组的方括号语法()实际上是从… 继承的。 该结构不能像其他语言(php,python等)中所看到的那样更传统。 Javascript
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
问题内容: 我试图设置获取所有元素的ID 。我写了以下代码: 但是我在控制台中得到以下输出: 这不是我所期望的。为什么第二个控制台输出却第一个控制台输出是? 问题答案: 在回答原始问题时,您使用不正确。在您的代码中,是索引。因此,要从伪数组中获取值,就必须这样做,而要获取id,就必须这样做。但是,首先不应该这样做。 摘要 永远不要使用来迭代nodeList或HTMLCollection。避免它的原
Swift 循环 Swift for-in 循环用于遍历一个集合里面的所有元素,例如由数字表示的区间、数组中的元素、字符串中的字符。 语法 Swift for-in 循环的语法格式如下: for index in var { 循环体 } 流程图: 实例 1 import Cocoa for index in 1...5 { print("\(index) 乘于 5 为:\(i