что означает «!» в 7.2.14 Сравнение абстрактного равенства спецификации ecmascript

#javascript #ecmascript-6

#javascript #ecmascript-6

Вопрос:

я немного смущен тем, что в разделе сравнения абстрактного равенства, как показано ниже:

Сравнение x == y, где x и y являются значениями, выдает true или false. Такое сравнение выполняется следующим образом:

  1. Если тип (x) совпадает с типом(y), то верните результат выполнения строгого сравнения равенства x === y .
  2. Если x равно нулю, а y не определено, верните true .
  3. Если x не определено, а y равно нулю, верните true .
  4. Если тип (x) — число, а тип(y) — строка, верните результат сравнения x == ! Номер тона (y).
  5. Если тип (x) — строка, а тип (y) — число, верните результат сравнения ! Номер тона (x) == y.
  6. Если тип(x) является логическим, верните результат сравнения ! Номер тона (x) == y.
  7. Если тип(y) является логическим, верните результат сравнения x == ! Номер тона (y).

что означает ‘!’ для ! Номер тона (x) и ! Номер тона (y)?

кто-нибудь может мне с этим помочь? Спасибо!

Ответ №1:

Значение определено в разделе 5.2.3.4 ReturnIfAbrupt Сокращения

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

 1. Let val be ! OperationName(). 
  

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

 1. Let val be OperationName().
2. Assert: val is never an abrupt completion.
3. If val is a Completion Record, set val to val.[[Value]]. 
  

Записи о внезапном завершении используются для распространения ошибок, поэтому в основном это означает, что эти процедуры не выдадут ошибку и что запись завершения должна быть «развернута», чтобы использовать фактическое значение, которое она инкапсулирует.

Комментарии:

1. Спасибо за ваш реплей, действительно ценю это