我对 Object.entries()[i] 感到困惑

I m confused with Object.entries()[i]

我查看了这个页面:mozilla documentation

我不明白为什么索引 0 为:

const object3 = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.entries(object3)[0]);

// expected output: Array ["100", "a"] <== i thought of this

相反,文档说你得到:

// expected output: Array ["2", "b"]

谁能解释一下为什么?

这是因为该对象具有数字键,当您使用数字键操作该对象时,javascript 会按 key 值的升序对 key-values 进行排序,并且由于您有键 27100。所以,当你 console.log 对象 Object.entries(object3) 时检查这个你得到排序,当你访问 [0] 你得到 Array ["2", "b"]

const object3 = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.entries(object3));

进一步说明当键值是数字时通过升序对对象进行排序。 javascript 在幕后对它们进行分类。

var a = {
  10: 'ten',
  5: 'five',
  11: 'eleven',
  1: 'one'
};
console.log(a);

文档说 Object.entries returns 给定对象的数组可枚举 属性 [key,value] 对。所以是的,如果你看这个声明,它会令人困惑

const object3 = { 100: 'a', 2: 'b', 7: 'c' };

并在您调用 Object.entries(object3)[0] 时最终得到 ["2", "b"]

当您执行此操作时 Object.entries(object3)[0] ,您正在访问此函数 Object.entries(object) 返回的索引为 0 的一对。该数组的顺序与您最初定义 object3 的方式无关。根据文档的顺序与提供的顺序相同 for...in 循环。我 运行 对象上的 for...in 循环,这就是我得到的命令。

2,7,100

这就是您得到 ["2", "b"] 而不是 ["100", "a"] 的原因。正如其他人在这里提到的那样,顺序似乎是这样的,因为 2<7<100。