что значит "!"в 7.2.14 Сравнение абстрактных равенств спецификации ecmascript - PullRequest
3 голосов
/ 24 апреля 2019

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

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

  1. Если тип (x) совпадает с типом (y), то возвращает результат выполнения сравнения строгого равенства x === y.
  2. Если x равен нулю, а y не определен, вернуть true.
  3. Если x не определен и y равен null, вернуть true.
  4. Если Type (x) равен Number и Type (y)Строка, вернуть результат сравнения x == !ToNumber (y) .
  5. Если Type (x) равен String, а Type (y) равен Number, вернуть результат сравнения !ToNumber (x) == y.
  6. Если тип (x) - логическое значение, вернуть результат сравнения !ToNumber (x) == y.
  7. Если Type (y) является логическим значением, вернуть результат сравнения x == !ToNumber (y) .
  8. ...

Что означает «!»за !ToNumber (x) и !ToNumber (y) ?

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

1 Ответ

3 голосов
/ 24 апреля 2019

Значение определено в разделе 5.2.3.4 ReturnIfAbrupt Shorthands

Аналогично, префикс ! используется для указания того, что следующий вызов абстрактной или синтаксически направленной операции никогда не вернет внезапное завершение и что результирующая запись завершения [[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]]. 

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...