Гарантирует ли JavaScript порядок свойств объекта?

Не знаю, правильно ли я понимаю ваш вопрос. Но для второй версии: Это немедленно вызовет anotherFunction.

В основном ваш плагин должен быть какой-то функцией, которая выглядит так:

var myPlugin = function(options, callback) {
    //do something with options here
    //call callback
    if(callback) callback();
} 

Вы должны предоставить объект функции как обратный вызов, поэтому либо function(){...}, либо anotherFunction (без ()).

547
задан Jack Bashford 23 April 2019 в 06:47
поделиться

1 ответ

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

  • Object.keys, Object.values, Object.entries
  • for..in циклы
  • JSON.stringify

, Но, скоро (возможно, в ES2021), порядок свойства на эти ранее ненадежные методы будет , как гарантировать спецификация , будет выполнен с помощью итераций тем же детерминированным способом как другие, из-за к предложение по этапу 3 : Для - в порядке .

перечисления Точно так же, как с методами, которые имеют гарантируемый итеративный порядок (как Reflect.ownKeys и Object.getOwnPropertyNames), ранее неуказанные методы также выполнят итерации в следующем порядке:

  • ключи Числового массива, в возрастающем числовом порядке
  • Все другие ключи несимвола, в порядке
  • вставки ключи Символа, в порядке

вставки Это - то, что в значительной степени каждая реализация уже делает, но новое предложение сделает это чиновником.

, Хотя текущая спецификация уезжает.. в итеративном порядке" почти полностью неуказанный , реальные механизмы имеют тенденцию быть более последовательными: "

отсутствие специфики в ECMA-262 не отражает действительность. В обсуждении, возвращающемся годы, конструкторы заметили, что существуют некоторые ограничения на поведение для - в который любой, кто хочет работать, код сети должен следовать.

, поскольку каждая реализация уже выполняет итерации по свойствам очевидно, она может быть помещена в спецификацию, не повреждая назад совместимость.

<час>

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

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

Ни объект, ни что-либо в его опытной цепочке не имеют свое опытное изменение во время повторения.

Ни объекту, ни чему-либо в его опытной цепочке не удалили свойство во время повторения.

Ничему в опытной цепочке объекта не добавили свойство во время повторения.

свойство No объекта или что-либо в его опытной цепочке имеет его изменение перечислимости во время повторения.

Никакие несчетные тени свойства счетная.

1
ответ дан 22 November 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: