为何JavaScript对象属性默认按字母顺序排序?
问题重现
定义的JavaScript对象:
let jsonobj = { name: "Ironman", power: "vibranium", student: "spiderman", identity: "Tony stark" } console.log(jsonobj)
控制台输出(按字母排序展示):
{name: 'Ironman', power: 'vibranium', student: 'spiderman', identity: 'Tony stark'} identity: "Tony stark" name: "Ironman" power: "vibranium" student: "spiderman"
原因解析
首先明确:ES6之后JavaScript对象的属性在遍历(比如for...in、Object.keys())时是有明确顺序的,但控制台的输出展示规则和语言规范不是一回事。
ES6属性遍历规范:
- 优先处理所有整数类型的键(比如
{2: 'a', 1: 'b'}会先遍历1再2) - 然后处理字符串类型的键,严格按照属性添加的先后顺序遍历
- 最后处理Symbol类型的键,同样按添加顺序
- 优先处理所有整数类型的键(比如
控制台展示的特殊处理:
你看到的按字母排序,是浏览器或Node.js的控制台为了让输出更整洁易读,主动对对象属性做了排序展示,并非对象本身的属性顺序发生了改变。比如用Object.keys()或for...in遍历,得到的顺序会和你定义时完全一致:console.log(Object.keys(jsonobj)); // 输出: ['name', 'power', 'student', 'identity']
早期JS规范未定义对象属性顺序,不同环境表现不一,但ES6已经统一了规则,只是控制台的展示逻辑独立于语言规范,才会出现你看到的“按字母排序”的情况。
内容的提问来源于stack exchange,提问作者blogger10
相关产品推荐
相关产品推荐

