#javascript #ecmascript-6
#javascript #ecmascript-6
Вопрос:
я немного смущен тем, что в разделе сравнения абстрактного равенства, как показано ниже:
Сравнение x == y, где x и y являются значениями, выдает true или false. Такое сравнение выполняется следующим образом:
- Если тип (x) совпадает с типом(y), то верните результат выполнения строгого сравнения равенства x === y .
- Если x равно нулю, а y не определено, верните true .
- Если x не определено, а y равно нулю, верните true .
- Если тип (x) — число, а тип(y) — строка, верните результат сравнения x == ! Номер тона (y).
- Если тип (x) — строка, а тип (y) — число, верните результат сравнения ! Номер тона (x) == y.
- Если тип(x) является логическим, верните результат сравнения ! Номер тона (x) == y.
- Если тип(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. Спасибо за ваш реплей, действительно ценю это