Операторы идентичности ECMAScript
- Предыдущая страница Реляционные операторы
- Следующая страница Условные операторы
Определение двух переменных как равных — это очень важное действие в дизайне программ.
ECMAScript предоставляет два набора операторов равенства: операторы равенства и неравенства используются для обработки исходных значений, а операторы строгого равенства и строгого неравенства — для обработки объектов.
Равенство и неравенство
В ECMAScript оператор равенства представлен двойным равенством (==), который возвращает true, когда и только когда два операнда равны. Неравенство представлено символом exclamación (не) и равенством (!=), который возвращает true, когда и только когда два операнда не равны. Для определения того, равны ли два операнда, оба этих оператора выполняют преобразование типов.
Правила выполнения типа преобразования такие:
- Если один из операндов является логическим значением, перед проверкой равенства его следует преобразовать в числовое значение. false преобразуется в 0, true в 1.
- Если один из операндов является строкой, а другой — числом, перед проверкой равенства строку следует попытаться преобразовать в число.
- Если один из операндов является объектом, а другой — строкой, перед проверкой равенства объект следует попытаться преобразовать в строку.
- Если один из операндов является объектом, а другой — числом, перед проверкой равенства объект следует попытаться преобразовать в число.
При сравнении этот оператор также следует следующим правилам:
- Значения null и undefined равны.
- При проверке равенства null и undefined не следует преобразовывать их в другие значения.
- Если один из операндов является NaN, оператор равенства возвращает false, а оператор не равен возвращает true.
- Если два операнда являются объектами, то сравниваются их значения по ссылке. Если два операнда指向 один и тот же объект, то оператор равенства возвращает true, в противном случае два операнда не равны.
Важно отметить:Даже если два числа оба являются NaN, оператор равенства возвращает false, потому что, согласно правилам, NaN не равен NaN.
В таблице перечислены некоторые特殊情况 и их результаты:
Выражение | Значение |
---|---|
null == undefined | true |
"NaN" == NaN | false |
5 == NaN | false |
NaN == NaN | false |
NaN != NaN | true |
false == 0 | true |
true == 1 | true |
true == 2 | false |
undefined == 0 | false |
null == 0 | false |
"5" == 5 | true |
Полный и неполный знаки равенства
Эквивалентные и неэквивалентные операторы аналогичны полным и неполным знакам равенства. Эти операторы выполняют то же действие, что и знаки равенства и неравенства, но они не выполняют преобразование типов перед проверкой эквивалентности.
Полный знак равенства представлен тремя равенствами (===), и он возвращает true только в том случае, если операнды равны без преобразования типов.
Например:
var sNum = "66"; var iNum = 66; alert(sNum == iNum); // Вывод "true" alert(sNum === iNum); // Вывод "false"
В этом коде первый alert использует знак равенства для сравнения строки "66" и числа 66, и выводит "true". Как уже было сказано, это потому, что строка "66" будет преобразована в число 66, и только затем сравнивается с другим числом 66. Второй alert использует полный знак равенства для сравнения строки и числа без преобразования типов, и, конечно, строка не равна числу, поэтому выводит "false".
Неэквивалентный знак представлен сочетанием感叹ика и двух равенств (!==), и он возвращает true только в том случае, если операнды не требуют преобразования типов и не равны.
Например:
var sNum = "66"; var iNum = 66; alert(sNum != iNum); // Вывод "false" alert(sNum !== iNum); // Вывод "true"
Здесь, первый alert использует неэквивалентный знак, чтобы преобразовать строку "66" в число 66, чтобы она была равна второй операнду 66. Поэтому результат вычисления равен "false", так как два операнда равны. Второй alert использует неэквивалентный знак. Этот оператор спрашивает: "sNum" и "iNum" различаются? Ответ на этот вопрос: да (true), так как sNum является строкой, а iNum является числом, и они, конечно, различаются.
- Предыдущая страница Реляционные операторы
- Следующая страница Условные операторы