为啥这个js对象不是按代码执行顺序输出

var ob2 = {}
ob2.a = 1
console.log(ob2) // {a: 1}
ob2.b = 1
console.log(ob2) // {a: 1, b: 1}
ob2[342344] = 1
console.log(ob2)// {342344: 1, a: 1, b: 1}

如代码所示,感觉应该是输出 {a: 1, b: 1,342344: 1},怎么让他按照这种形式输出呢?

阅读 2.1k
2 个回答

这个输出是有规则的 如果是数字则按数字从小到大输出 如果是字母则按定义时顺序输出 可以自己查查

对象key顺序跟你理解的不一样:

  1. 整形数字属性名称按照升序排列;
  2. 非整形数字属性名称按照插入顺序排列(其中字符key要排在Symbol前面)。
var a = {    
    b: 2, 
    a: 1,
    [Symbol('name')]: 'join',
    [Symbol('age')]: 12,
    1: 3, 
    2: 3,
    name: 'join',
    age: '20'
};

// ["1", "2", "b", "a", "1.1", "name", "age"]
console.log(Object.getOwnPropertyNames(a));

// [Symbol(name), Symbol(age)]
console.log(Object.getOwnPropertySymbols(a));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题