JS中对象属性遍历的顺序总结

在 JavaScript 中,对象的遍历顺序是有规则的,不同类型的键(整数索引、字符串键、Symbol)在遍历中的顺序有所不同。以下是详细的总结。

规则总结

  1. 整数索引的键

    • 所有被解释为整数的属性键(即整数或类似整数的字符串键,如 0, '0', '1')会按照数值升序进行遍历。
    • 注意:即使是 '0'0,它们在遍历时会被视作相同的整数索引,按数值升序排列。
  2. 非整数的字符串键

    • 这些属性按照属性被插入对象的顺序遍历。
    • 例如,'a', 'b', 'name' 等非整数的字符串属性会按照你定义它们的顺序进行遍历。
  3. Symbol

    • 如果对象中有 Symbol 属性,这些属性将被遍历,但它们会在所有整数索引和字符串键之后出现,且按定义的顺序排列。

具体遍历顺序(适用于 for...inObject.keys() 等)

  1. 整数索引的属性(按数值升序排列)。
  2. 字符串键的属性(按插入顺序排列)。
  3. Symbol 属性(按插入顺序排列,且位于最后)。

示例

let obj = {
  '0': 'zero',
  '100': 'one hundred',
  a: 'letter a',
  2: 'two',
  b: 'letter b',
  '01': 'leading zero one',
  1: 'one',
};

for (let key in obj) {
  console.log(key);
}

解释:

  1. 0, '100', 2, '01', 1 会被解释为整数索引,因此按数值升序排列。
  2. 其他字符串键如 'a', 'b' 会按照定义顺序排列。
  3. Symbol 键将位于最后(如果有的话)。

实际输出顺序:

0
1
2
100
a
b
01

总结:

  • 整数键(包括字符串形式的整数)会首先按照数值升序排列
  • 非整数字符串键按照插入顺序排列。
  • Symbol 键在最后按插入顺序排列

这种规则在大多数遍历方法中都是一致的,包括 for...inObject.keys()

你可能感兴趣的:(JavaScript,javascript,开发语言,ecmascript,前端)