很多开发者可能都不会注意一个问题,你定义一个JavaScript对象的多个属性,这些属性显示的顺序是什么样的?可能你第一反应会觉得这个顺序是无法预测的,但其实EcmaScript标准里对这个有做说明(各个浏览器的实现可能会有差别),属性的排序取决于这个属性的类型和属性的值。
在标准里,从ES6开始,属性的顺序是基于一个特殊的规则的,除非特指按照时间排序。作者通过两个新方法Object.getOwnPropertyNames和Reflect.ownKeys来编写示例讲解这一属性排序规则。
- 数字。当属性的类型时数字类型时,会按照数字的从大到小的顺序进行排序;
- 字符串。当属性的类型是字符串时,会按照时间的先后顺序进行排序;
- Symbol。当属性的类型是Symbol时,会按照时间的先后顺序进行排序。