`

for... in遍历的顺序

 
阅读更多

虽然ECMAScript规定了对象的遍历顺序是由对象定义时属性的书写顺序决定的.(译者注:ES5已经对遍历机制做了调整,重新规定:属性遍历的顺序是没有被规定的), 大部分浏览器都依照这个规定,先添加的属性先被遍历(除了从原型上继承的属性)(译者注:Chrome和Opera已经遵循了ES5的新规定,具体请看). 但是, 在 Internet Explorer 中, 使用 delete 删除一个属性后, 奇怪的事情发生了,如果被删除的属性重新被添加,那么遍历时, 该属性的顺序会是上次删除前的那个位置所应该有的顺序,而不是出现在遍历的最后一个.

 

Chrome Opera 中使用 for-in 语句遍历对象属性时会遵循一个规律,它们会先提取所有 key 的 parseFloat 值为非负整数的属性, 然后根据数字顺序对属性排序首先遍历出来,然后按照对象定义的顺序遍历余下的所有属性。其它浏览器则完全按照对象定义的顺序遍历属性。

可用不同浏览器尝试以下代码:

var a = {
    1:"a",
    7:"b",
    4:"c",
    5:"d",
    "-3":"e",
    f:"f",
    "2.2":"g",
    6:"h",
    0:"i",
    "2" : "j"
};

for(var i in a)
    alert(i + ": " + a[i])

 参考:http://w3help.org/zh-cn/causes/SJ9011

分享到:
评论

相关推荐

    【JavaScript源代码】详解JS对象遍历的顺序问题.docx

     对待遍历顺序,对象有一套自己既定的规则,在此规则下呢,对象的遍历顺序会受插入元素顺序的影响,但是不完全受插入元素先后顺序的影响。如果您有「必须按插入元素顺序遍历」的场景,可以考虑使用 Map。 遍历对象...

    javascript for-in有序遍历json数据并探讨各个浏览器差异

    object本身就是无对象的集合,因此在用 for-in 语句遍历对象的属性时,遍历出的属性顺序与对象定义时不同。 了解W3C标准: 根据 ECMA-262(ECMAScript)第三版中描述,for-in 语句的属性遍历的顺序是由对象定义时...

    vue 解决遍历对象显示的顺序不对问题

    今天小编就为大家分享一篇vue 解决遍历对象显示的顺序不对问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    python三大流程控制.pdf

    python入门,python三大流程控制,顺序结构: 从左至右,从上至下 选择结构: 单分支:循环结构: 1. for ... in循环 2. while循环 for ... in 循环结构 类似于迭代器,将依次遍历列表中的数据

    C# Dictionary的遍历和排序

    c#遍历的两种方式 for和foreach  for: 需要指定首位数据、末尾数据、数据长度; for遍历语句中可以改变数据的值; 遍历规则可以自定义,灵活性较高  foreach: 需要实现ienumerator接口; 在遍历中不可以改变...

    详解Python中打乱列表顺序random.shuffle()的使用方法

    之前自己一直使用random中 randint生成随机数以及使用for将列表中的数据遍历一...x = [i for i in range(10)] print(x) random.shuffle(x) print(x) 源码及注释(个人翻译注释) def shuffle(self, x, random=None):

    JS使用for in有序获取对象数据

    需要遍历对象,将key value分为两个数组,可以使用forin,但是获取到的对象中的属性及属性值排列是无序的, 目的是要按顺序取出对象中的key和value值。 实现效果: 比如接口返回的对象格式: 需要转换的格式: ...

    JS中如何轻松遍历对象属性的方式总结

    Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for…in 循环遍历该对象时返回的顺序一致 。如果对象的键-值都不可枚举,那么将返回由键组成的数组。 这是...

    JavaScript中循环遍历Array与Map的方法小结

    js循环数组各种方法 eg1: for (var i = 0; i < myStringArray.length; i++) { alert(myStringArray[i])...for(var i in this.$GLOBAL_DETAIL.album_photo_ids){if(this.$GLOBAL_DETAIL.alb

    分析JavaScript数组操作难点

    JavaScript 引擎不保证对象的遍历顺序。当把数组作为普通对象遍历时同样不保证遍历出的索引顺序。 2、会遍历出对象原型链上的值。 如果你改变了数组的原型对象(比如 polyfill)而没有将其设为 enumerable: false,...

    跟我学习javascript的循环

    但是在使用for..in循环对Object中的属性进行遍历的时候,确实是需要依赖于某种顺序的。正因为ECMAScript没有对这个顺序进行明确地规范,所以每个JavaScript执行引擎都能够根据自身的特点进行实现,那么在不同的执行...

    文件遍历排序函数

    <% function bianli(path) ‘initiate path = server.mappath(path) set fso=server.CreateObject(scripting.filesystemobject) set objFolder=fso.GetFolder(path) ... for each objFile in objFiles fil

    浅谈python for循环的巧妙运用(迭代、列表生成式)

    我们可以通过for循环来迭代list、tuple、dict、set、字符串,dict比较特殊dict的存储不是连续的,所以迭代(遍历)出来的值的顺序也会发生变化。 迭代(遍历) #!/usr/bin/env python3 #-*- coding:utf-8 -*- ...

    JS解惑之Object中的key是有序的么

    当我们使用for/in遍历一个Object对象的时候,打印的结果是否按key的顺序打印出来呢? 答案是:不一定。 背景 最近在做一个项目的时候,遇到这样一个需求: 一个下拉列表中有3个固定选项,包括:-1:全部;0:...

    每日一题4、Python中的迭代器.docx

    迭代对象: 在Python中,操作列表、字典、字符串等可以通过for ... in ... 的方式去获取对象中的元素,这个过程称为遍历,也叫做迭代。这些对象称为可迭代对象。 这些对象都有一个 __iter__()方法,这个方法提供了...

    Javascript中For In语句用法实例

    主要介绍了Javascript中For In语句用法,实例分析了javascript使用For In语句遍历数组的技巧,需要的朋友可以参考下

    107个常用javascript语句

    107个常用javascript语句 -7.焦点 .focus(); -6....} ("") %> ...-5....-3....-2....-1.... for( i=1 ;...3.传统的HTML文档顺序是:document->html->(head,body) ... 遍历:for ( var i=0 ; i ary.length ; ++i ) ary[i];

    python冒泡排序(Bubble Sort).docx

    它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 以下是一个用Python实现的冒泡排序的例子: `...

    Java开发技术大全(500个源代码).

    accumulationByFor.java 用for语句写的累加程序 accumulationByWhile.java 用while语句写的累加程序 boolExample.java 演示boolean变量的程序 charExample.java 演示char变量的程序 compare.java 演示前缀、...

    python 移动零,给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序

    for i in range(len(x)): if x[i] == 0: for j in range(i, len(x)): if j + 1 (x) - i: x[j], x[j + 1] = x[j + 1], x[j] print(x) # 双指针: 设定一个指针 j 从 0 开始, 然后另一个指针遍历数组 # 将指针i,j...

Global site tag (gtag.js) - Google Analytics