Ecmascript Сравнение абстрактного равенства - PullRequest
0 голосов
/ 01 сентября 2018

Спецификация ECMAScript для «сравнения абстрактного равенства» (==) изменилась между версиями 6.0 и 9.0, добавив символ ! перед вызовами ToNumber в некоторых компонентах сравнения. Может кто-нибудь сказать мне, почему ECMAScript добавил это в спецификации? Это так запутанно.

Вот версия спецификации от 6.0: 6.0 И вот как спецификация изменилась в 9.0: 9.0 Что мотивировало это изменение? Что это значит?

1 Ответ

0 голосов
/ 13 сентября 2018

См. Условные обозначения , в частности ReturnIfAbrupt Shorthands :

Аналогично, префикс ! используется, чтобы указать, что следующий вызов абстрактной или синтаксически направленной операции никогда не вернет резкое завершение и что в результате записи о завершении [[Value]] поле должно использоваться вместо возвращаемого значения операции. Например, шаг:

  1. Пусть val будет ! OperationName().

эквивалентен следующим шагам:

  1. Пусть val будет OperationName().
  2. Утверждение: val никогда не бывает внезапным завершением.
  3. Если val является записью завершения, установите val на val. [[Значение]].

Синтаксически-ориентированные операции для семантики времени выполнения используют это сокращение путем размещения ! или ? до вызова операции:

  1. Выполнить ! СинтаксическаяПереключенная Операция Нетерминала.
...