【发布时间】:2021-01-05 07:50:57
【问题描述】:
JavaScript 对对象属性的排序有一套规则。我有一个奇怪的例子。
当以毫秒为单位的时间戳用作对象属性键时,排序不起作用。
当以秒为单位的时间戳用作对象属性键时,排序有效。
var objS = {
1600333200: 'a',
1600419600: 'b',
1600338600: 'c'
};
console.log('seconds', JSON.stringify(objS));
var objMs = {
1600333200000: 'a',
1600419600000: 'b',
1600338600000: 'c'
};
console.log('milliseconds', JSON.stringify(objMs));
有什么解释吗?
【问题讨论】:
-
我认为 ro 2^32(或 2^31?)上的数字键是有序的......但是......我必须看看这是否符合某些规范 - 我一直一直认为根本无法保证关键顺序 - 但规格会发生变化
-
AFAIK,JS 对象中键的顺序不能保证任何类型。我强烈建议您不要在任何逻辑上依赖它们。
-
我刚刚读到,对于任何可以是不超过 2^53 的整数的键的顺序都应该是数字的......但显然这是错误的
-
@SaurabhTiwari - ES6 发生了变化 - 只是寻找它(这就是谷歌的目的)
-
快速测试 ... 整数表示最多为
2^32的数字,之后它们不被视为数字 - 所以成为“按创建顺序排列的字符串”
标签: javascript arrays json sorting object