Каков порядок свойств объекта в цикле JavaScript for...in?

внешний интерфейс JavaScript

изучение языка JavaScriptfor...inПри зацикливании вам всегда будут говорить: используйте его для циклического перебора объектов, а порядок зацикленных свойств ненадежен, поэтому не используйте его вfor...inДелайте логические суждения, которые зависят от порядка свойств объекта.

Но когда мы сами пишем объект, мы несколько раз обновляем его туда-сюда и обнаруживаем, что последовательность зацикленных свойств одинакова?

let user = {
  name: "John",
  age: 30,
  isAdmin: true
};

for(let key in user) {
  console.log( key ); // name age isAdmin ← 是一样的啊
}

// 不信再写一个对象
let tom = {
  gender: 'male',
  hasGirlfriend: false,
  isFunny: true
};

for(let key in tom) {
  console.log( key ); // gender hasGirlfriend isFunny ← 还是一样的啊
}

В чем дело? Я прочитал это сегоднястатья, объясняетfor...inВ каком порядке зацикливаются свойства объекта?

Прочитав, я понял. Теперь поделитесь со всеми.

Его можно резюмировать одним предложением:Сначала просмотрите целочисленные свойства (целочисленные свойства в порядке возрастания), а затем просмотрите другие свойства в том порядке, в котором они были созданы..

Давайте посмотрим на пример:

let codes = {
  "49": "Germany",
  "41": "Switzerland",
  "44": "Great Britain",
  "1": "USA"
};

for(let code in codes) {
  alert(code); // 1, 41, 44, 49
}

Конечным результатом обхода является: атрибут1Пройди его сначала,49Наконец пройти это.

здесь1,41,44а также49является целочисленным свойством.

Так что же такое целочисленное свойство?? Мы можем проиллюстрировать следующие результаты сравнения:

String(Math.trunc(Number(prop)) === prop

Когда приведенный выше результат сужденияtrue, prop — целочисленное свойство, в противном случае — нет.

так

  • "49"является целочисленным свойством, потому чтоString(Math.trunc(Number('49'))Результат по-прежнему"49".
  • "+49"не является целочисленным свойством, потому чтоString(Math.trunc(Number('+49'))Результат"49",нет"+49".
  • "1.2"не является целочисленным свойством, потому чтоString(Math.trunc(Number('1.2'))Результат"1",нет"1.2".

В приведенном выше примере, если вы хотите выполнить цикл в порядке создания, вы можете использоватьшутитьМетоды:

let codes = {
  "+49": "Germany",
  "+41": "Switzerland",
  "+44": "Great Britain",
  // ..,
  "+1": "USA"
};

for(let code in codes) {
  console.log( +code ); // 49, 41, 44, 1
}

(над)