Forked from egrashinagi/EcmaStandart Перевод 11.9.3.txt
Created
February 4, 2020 10:38
-
-
Save ser0ja/3f5842cbb0f8e67db01d532b5ad67914 to your computer and use it in GitHub Desktop.
EcmaStandart Перевод 11.9.3 The Abstract Equality Comparison Algorithm
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Алгоритм сравнения | |
Сравнение x==y , где x и y значения представляют true or false. Эти значения выполнены следующим образом: | |
1. Если Тип X такой же как тип Y, тогда: | |
a. Если Тип X undefined возвращает true. | |
b. Если Тип X Null возвращает true. | |
c. Если Тип X number тогда | |
i. если X NaN возвращает false. | |
ii. если Y NaN возвращает false. | |
iii.Если X такой же как Number и значение Y возвращает true. | |
iv. Если X +0 и Y -0 возвращает true. | |
v. Если X -0 а Y +0 возвращает true. | |
vi. Возвращает false. | |
d. Если Тип X String, в этом случае возвращает true, если у X и Y такая же последовательность символов (одинаковая длина и одинаковые символы в соответствующих позициях). В противном случае возвращает false. | |
e. Если Тип X Boolean, возвращает true если X и Y оба true или оба false. В противном случае, возвращает false. | |
f. Возвращает true если X и Y относятся (ссылаются) к тому же объекту. Иначе возвращает false. | |
2. Если X Null и Y undefined возвращает true. | |
3. Если X undefined и Y null возвращает true. | |
4. Если Тип X -number а тип Y - string, возвращает результат сравнения X==ToNumber(Y). | |
5. Если Тип X string и Тип Y number, возвращает результат сравнения ToNumber(x) == y. | |
6. Если Тип X Boolean, возвращает результат сравнения ToNumber(x) == y . | |
7. Если Тип Y - boolean, возвращает результат сравнения x == ToNumber(y) . | |
8. Если Тип X тоже string или number и Тип Y - Object, возвращает результат сравнения x == ToPrimitive(y). | |
9. Если Тип X Object и Тип Y String или Number, возвращает результат сравнения ToPrimitive(x) == y. | |
10. Возвращает false. | |
ЗАМЕЧАНИЕ 1. Учитывая вышеизложенное определение равенства: | |
* Строкое сравнение может быть принудительно: "" + a == "" + b. | |
* Численное сравнение может быть принудительно: +a == +b. | |
* Логическое сравнение может быть принудительно: !a == !b. | |
ЗАМЕЧАНИЕ 2. Операторы равенства поддерживают следующие варианты: | |
* A != B соответствует !(A == B). | |
* A == B соответствует B == A, кроме того оценки A и B. | |
ЗАМЕТКА 3. Оператор равенства не всегда переходный. Например, там может быть две разные String, Object, каждый из которых представляет одну и ту же String значение. Каждый объект String будет считаться равным с таким String значением как the == operator, но два String объекта не будут равны друг другу, например: | |
new String("a") == "a" and "a" == new String("a")are both true. | |
new String("a") == new String("a") is false. | |
ЗАМЕТКА 4. Сравнение строк использует простой тест равенства последовательностей кода единичных значений. Там нет попытки использовать более сложных, семантически ориентированных определений равенства строк или символов и схем упорядочения, определенные в спецификации Unicode. Поэтому значения строки, которые являются канонически эквивалентными согласно стандарту Юникода, могут быть неравными. Фактически этот алгоритм предполагает, что строки уже находятся в нормализованной форме. | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment