Javascript Object.values订单保证

Javascript Object.values订单保证,javascript,ecmascript-6,Javascript,Ecmascript 6,是否保证Object.values(常量)将返回[1,2] 在上,它表示它遵循for…in,它以原始插入顺序在中迭代 在某些情况下,它声称,getOwnPropertyNames的订单是有保证的,但在中,的订单是没有保证的 另外,他们可以使用什么实现来保证插入顺序?如果使用某种排序的已排序集合来跟踪顺序,是否会导致插入/删除对象属性的O(logn)复杂性 const CONSTANT = Object.freeze({a: 1, b: 2}); 将保证顺序。是的,如果使用数组控制迭代。问题是直

是否保证
Object.values(常量)
将返回
[1,2]

在上,它表示它遵循
for…in
,它以原始插入顺序在中迭代

在某些情况下,它声称,
getOwnPropertyNames
的订单是有保证的,但在中,
的订单是没有保证的

另外,他们可以使用什么实现来保证插入顺序?如果使用某种排序的已排序集合来跟踪顺序,是否会导致插入/删除对象属性的O(logn)复杂性

const CONSTANT = Object.freeze({a: 1, b: 2});

将保证顺序。

是的,如果使用数组控制迭代。问题是直接迭代对象的属性。我认为这里的底线是:不能保证顺序是[1,2],也不能保证它是插入顺序。它可能是[1,2]或[2,1],但您可以保证对象的顺序。值
将与中…的相同,并且它不会改变,除非对象本身改变。@K.Kirsz说,
for…in语句迭代对象的可枚举属性,按原始插入顺序。
MDN的语句不规范。问题不特定于Object.values。这完全取决于JS引擎如何处理对象属性顺序。
for (let v of ['a','b']) {
    console.log(CONSTANT[v])
}