safari中的Object.keys表现不同

时间:2016-06-14 03:50:50

标签: javascript object safari

考虑向对象添加值,如下所示



var obj ={};
obj["3"] = 10;
obj["2"] = 10;
obj["0"] = 10;
alert(Object.keys(obj));




在除safari之外的所有浏览器中Object.keys返回如0,2,3,其中在safari中返回为添加顺序,如3,2,0

Safari中是否存在此已知问题(任何特定版本)

2 个答案:

答案 0 :(得分:1)

唯一的要求是它保留与for ... in

相同的顺序

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

如果不是,则应将其作为Safari的错误提交,否则符合规范。

答案 1 :(得分:0)

js 对象的预期行为,属性没有排序。如果您需要这种行为,那么您应该使用 Map

您可以根据排序顺序对键进行排序,然后从排序后的键值对生成映射。地图将保证您的顺序正确。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map

<块引用>

普通对象的键虽然现在是有序的,但以前不是这样的,而且顺序很复杂。因此,最好不要依赖财产顺序。 该顺序最初仅在 ECMAScript 2015 中为自己的属性定义; ECMAScript 2020 也定义了继承属性的顺序。请参阅 OrdinaryOwnPropertyKeys 和 EnumerateObjectProperties 抽象规范操作。但请注意,没有一种机制可以迭代对象的所有属性;各种机制各自包括不同的属性子集。 (for-in 只包括可枚举的字符串键属性;Object.keys 只包括自己的、可枚举的、字符串键的属性;Object.getOwnPropertyNames 包括自己的、字符串键的属性,即使是不可枚举的;Object.getOwnPropertySymbols 只为符号键属性等)