Итак, в JavaScript у нас есть три оператора сравнения равенства.Я читал спецификацию ECMAScript и смотрел, как они работают.Что-то поразило меня.Встроенная функция Object.is()
имеет меньше шагов для сравнения, и у нее больше шансов завершиться раньше, чем у других операторов.Так значит ли это, что Object.is()
функционирует быстрее, чем другие операторы?
Вот фрагменты спецификации:
Object.is ()
- Если тип (x) отличается от типа (y), вернуть false.
Если тип (x) равен Number, то
a.Если x равен NaN, а y равен NaN, вернуть true.
b.Если x равен +0, а y равен -0, вернуть false.
с.Если x равен -0, а y равен +0, вернуть false.
d.Если x - это то же самое числовое значение, что и y, вернуть true.
е.Вернуть false.
- Вернуть SameValueNonNumber (x, y).
Свободные равны ==
Сравнение x == y, где x и y являются значениями, дает истину или ложь.Такое сравнение выполняется следующим образом:
Если тип (x) совпадает с типом (y), то
a.Вернуть результат выполнения строгого сравнения равенства x === y.
- Если x равен нулю, а y не определен, вернуть true.
- Если x не определен, а y равен нулю,верните true.
- Если Type (x) равен Number, а Type (y) равен String, вернуть результат сравнения x ==!ToNumber (y).
- Если Type (x) равен String, а Type (y) равен Number, вернуть результат сравнения!ToNumber (x) == y.
- Если Type (x) - логическое значение, вернуть результат сравнения!ToNumber (x) == y.
- Если тип (y) - логическое значение, вернуть результат сравнения x ==!ToNumber (y).
- Если для Type (x) задано либо String, Number, либо Symbol, а для Type (y) - Object, вернуть результат сравнения x == ToPrimitive (y).
- Если тип (x) равен объекту, а тип (y) равен либо строке, числу, либо символу, вернуть результат сравнения. ToPrimitive (x) == y.
- вернуть значение false.
Строгое равно ===
Сравнение x === y, где x и y - значения, дает значения true или false.Такое сравнение выполняется следующим образом:
Если тип (x) отличается от типа (y), вернуть false.
Если тип(х) - это число, затем
а.Если x равен NaN, вернуть false.
б.Если y равен NaN, вернуть false.
c.Если x - это то же числовое значение, что и y, вернуть true.
d.Если x равен +0, а y равен -0, верните true.
e.Если x равен -0, а y равен +0, верните true.
f.Вернуть false.
Вернуть SameValueNonNumber (x, y).