标签:效果 浏览器 测试 rip href 说明 oat help 完全
前言:最近用for-in时,看到说for-in不能保证遍历的对象顺序,对此有些疑问,于是便研究了下,本文做简要说明。
let obj = {
a: 'a',
b: 'b',
1: 1,
2: 2
}
let obj2 = {
name: '张三',
age: 13,
gender: 'male'
}
for(key in obj){
console.log(key)
}
// 输出顺序为1,2,a,b
for(key in obj2){
console.log(key)
}
// 输出的顺序为name,age,gender
可以发现,for-in的迭代顺序不是按定义对象时的顺序(其实不需要for-in,直接输出对象或用Object.keys
遍历都是一样的效果)
console.log(obj)// {1: 1, 2: 2, a: "a", b: "b"}
console.log(Object.keys(obj))// ["1", "2", "a", "b"]
那如果不是按定义的顺序,是按什么顺序呢?看obj1像是ASC码升序遍历,但看obj2又不是。
根据http://w3help.org/zh-cn/causes/SJ9011可以得知
说明:以上第二点,我在IE浏览器中测试过,并不是按对象定义的顺序输出,而是和chrome表现一样,都是按上部分【现象】中的表现输出。
结论:虽然没能完全确定for-in的遍历顺序,但可以知道此顺序不是唯一的,在不同的环境下可能会有不能的表现,所以我们不能依赖for-in来按某种特定顺序来遍历对象
标签:效果 浏览器 测试 rip href 说明 oat help 完全
原文地址:https://www.cnblogs.com/youhong/p/10840440.html