关于js 对象 容易被忽视的排序问题

在js中 object 笼统的理解可以是 key 和 value的对应集合。 比如  {key1 : value1,key2 : value2}

而数组是索引(index) 和数值的集合,如[a1,b1,c1] ,索引 0,1,2对应的数值分别是a1,b1,c1

我们知道在js中 数组是对象中的一种特殊形式,上面的列子也大概能够反映出数组和对象的一些关系和区别。

接下来就谈一谈数组和对象之间容易被我们忽视的排序问题。

var object1 = {‘2‘:‘b‘,‘3‘:‘c‘,‘1‘:‘a‘};
for(var key in object1){
  console.log(object1[key]);
}

我相信很多人和我一样 会认为上面的输出结果是 b c a

可事实上 运行结果是

"a"
"b"
"c"

原因就是:

在数组中,默认是按照索引值由小到大来输出数值的。

而当对象object1中的key是数字的时候,对象的key的功能就和数组中的索引一样了。输出的时候 会按照key由小到大来输出。

object1难道变成数组了吗?

怎么可能呢? 当试着输出 object1.length 结果却是 undefined.

说明 object1还是对象,而非数组。

至于为什么?  说法如下

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

时间: 2024-10-13 22:25:31

关于js 对象 容易被忽视的排序问题的相关文章

JQuery之JQuery的版本 JQuery入门 属性获取 JQuery就绪函数 JS文档就绪函数和JQuery文档就绪函数的区别 JS对象和JQuery对象的区别 关于$的使用 多个JS库的冲突解决方案

JQuery的版本 JQuery入门 属性获取 JQuery就绪函数 JS文档就绪函数和JQuery文档就绪函数的区别 JS对象和JQuery对象的区别 关于$的使用 多个JS库的冲突解决方案 JQuery的版本 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery的版本</title> <

DOM对象和js对象以及jQuery对象的区别

一.DOM对象 文档对象模型简称DOM,是W3C组织推荐的处理可扩展置标语言的标准编程接口. DOM实际上是以面向对象方式描述的文档模型.DOM定义了表示和修改文档所需的对象.这些对象的行为和属性以及这些对象之间的关系. 通过DOM,可以访问所有的 HTML 元素,连同它们所包含的文本和属性.可以对其中的内容进行修改和删除,同时也可以创建新的元素. HTML DOM 独立于平台和编程语言.它可被任何编程语言诸如 Java.JavaScript 和 VBScript 使用. DOM对象,即是我们用

js对象浅拷贝和深拷贝详解

js对象浅拷贝和深拷贝详解 作者:i10630226 字体:[增加 减小] 类型:转载 时间:2016-09-05我要评论 这篇文章主要为大家详细介绍了JavaScript对象的浅拷贝和深拷贝代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文为大家分享了JavaScript对象的浅拷贝和深拷贝代码,供大家参考,具体内容如下 1.浅拷贝 拷贝就是把父对像的属性,全部拷贝给子对象. 下面这个函数,就是在做拷贝: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 var

多个jsp页面共享一个js对象的超级方法

一个jsp页面为A.jsp,在A.jsp中点击一个按钮打开另一个B.jsp页面.思路如下: 在A.jsp打开B.jsp的事件中,写入如下代码: 1 2 window.top['_CACHE'] = chatFrdList; window.top['_CACHE'][frdUserId] = frdUserId; 其中,chatFrdList定义为var chatFrdList = new Object(); frdUserId为一个用户的id. 那么,在B.jsp的一个事件中,就可以执行下面的操

js对象字面量属性间相互访问的问题 和 这个问题与执行环境的关系

对象字面量属性间无法相互访问的问题: 我曾经在定义一个对象时, 并出于复用性的考虑试图复用某些属性: // test 1 var person = { firstName : "Bill", lastName : "Gates", fullName : firstName + " " + lastName // 这里报错 } alert(person.firstName); alert(person.lastName); alert(person

创建Vue.js对象:我的第一个Vue.js输出信息

<!DOCTYPE html><html><head><meta charset=”utf-8″><title>Vue第一条信息</title><script src=”js/vue.js”></script></head><body><div id=”app”><p>{{ message }}</p></div> <script&g

js 对象与过程

仔细数数自己学js已有有一个多月了,然而自己看了很多视频,最终还是写不出什么.然后开始看书写小案例,感觉这样学,更能巩固和学习新知识,觉得此方法还不错,希望对新人有帮助.书上定义js是一种面向对象的动态脚本语言,它具有面向对象语言所特有的各种特性如封装,继承,多态等.(这里几个特性就已经够新手折腾了,反正我在此停留了许久),今天又接触到了js的对象,我用自己的语言说,js对象 是由数据对象(布尔,数值,字符串,等等)和函数对象组成. 今天又接触到了面向对象与面向过程.然后百度一下,有一句不雅的话

js对象的学习笔记(仅供参考)

一.面向对象语言的基本特征: 抽象.封装.继承.多态 封装:将抽象的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(成员方法),才能对数据进行操作 继承:由一个或多个类得来类的类的属性和方法的能力,一个类可以继承(extends)父类中的(public/protect)属性和(public/protect)方法,继承可以解决代码复用问题 多态:编写能以多种方法运行的函数或方法的能力 JS对象类型:本地对象.宿主对象(浏览器对象).内置对象 本地对象:独立于宿主

JS对象和类

JS对象类别 内置对象 如Array Date Function 宿主对象 比如浏览器中的window 自定义对象 用户在代码中创建的 对象的构成 属性 按继承区分 自有属性 继承属性 对象原型中定义的属性 按类别分 数据属性 存取器属性 var o = { get name() {}, set name(value) {}, } 三个对象特性 对象原型 prototype 对象的类 class 对象的拓展标记 属性特性 数据属性特性 value,writable,enumerable,conf