for in 对象时,属性为非负整数的情况
2018-07-13 09:48 改吧 阅读(425) 评论(0) 编辑 收藏 举报在我做一个需求的时候 for in 一个对象,对象的属性都是数字
但是我想给这个对象加一个默认的属性跟值
原对象是{5446:"广州市"}。。。。。类似于下去
然后我想给我页面展示出来的有一个默认的值 就是“选择城市”
然后我在对象里面{"":"选择城市"}最前面加的
但是现实并不像我想的那样 ,循环这个对象,选择城市在最上面,而是在最下面 但是我想不通啊 明明我的对象是{"":"选择城市",5446:"广州市".......}这样的
为什么选择城市还在列表的最下面 然后我就去查资料了
然后看到vue的官网说for in 是按照Object.keys来排序的
Object.keys跟for ...in是一样的 (这句话不知道有没有问题)
然后我就在控制台demo了一下
var a={"":"123",name:"wenwen"} for(var i in a){console.log(i)} "" name
这是显示正常的
然后但是奇怪的事情发生了,当属性是非负整数的时候
会发生什么
var a={"":"123",123:"这是一个数字123",12:"这是一个数字12"} for(var i in a){console.log(i)} 12 123 ""
发现问题了吗?事情并不像我想的那样 "" 123 12这样打印
然后我就去查资料 发现了
它们会先提取所有 key 的 parseFloat 值为非负整数的属性, 然后根据数字顺序对属性排序首先遍历出来,然后按照对象定义的顺序遍历余下的所有属性。其它浏览器则完全按照对象定义的顺序遍历属性。
新版本中的属性遍历顺序说明与早期版本不同,这将导致遵循 ECMA-262 第三版规范内容实现的 JavaScript 解析引擎在处理 for-in 语句时,与遵循第五版规范实现的解析引擎,对属性的遍历顺序存在不一致的问题
有什么想说的欢迎留言