Далее на странице...
Как известно символ «=» (знак равно) в Javascript означает «присвоить».
А символ «==» (два знака равно) - это оператор проверки равенства или неравенства различных типов данных. Именно об операторе равенства будет идти речь на этой странице и о том, как происходит преобразование типов в Javascript.
Два значения относятся к одному типу
Сначала рассмотрим пример, когда два сравниваемых значения относятся к одному типу (строка и строка, число и число и т.д.).
var x = 1;
var y = 2;
if (x == y){
console.log(true);
}
else{
console.log(false);
}
var a = "Эхх...";
var b = "Эхх...";
if (a == b){
console.log(true);
}
else{
console.log(false);
}
Два значения относятся к одному типу
- - - - - - - - - - - консоль браузера - - - - - - - - - - -
false
true
Здесь все просто: два числа либо равны, либо нет. Со строками тоже: если набор символов в них совпадает, то они равны.
Два значения относятся к разным типам - Число и Строка
Как сравнить два операнда, если они относятся к разным типам?
Javascript имеет набор правил, согласно которым происходит преобразование типов (это когда одно из сравниваемых значений преобразовывается к типу другого значения, после чего происходит их сравнение).
Итак, начнем с самого простого: сравнение чисел и строк. При этом Javascript преобразует строку в число.
var x = 99;
var y = "99";
if (x == y){
console.log(true);
}
else{
console.log(false);
}
При таком сравнении Javascript стремиться преобразовать строку в число. После этого сравниваются числа.
Число и Строка - NaN
Рассмотрим другую ситуацию сравнения чисел и строк.
Если Javascript не удается преобразовать строку в число, то в результате от выдаст NaN.
var x = 99;
var y = "Эхх...";
if (x == y){
console.log(true);
}
else{
console.log(false);
}
Здесь при преобразовании типов строку не удается привести к числовому значению, поэтому Javascript считает ее «не числом», т.е. NaN. При сравнении числа с NaN Javascript выдает false.
Булевы значения и числа
Для начала сравним булево значение с числом.
Следует знать: при сравнении булевых значений с другими типами данных булево значение всегда преобразуется в число.
Здесь важно запомнить правило: true преобразуется в 1, false в 0.
var x = 1;
var y = true;
if (x == y){
console.log(true);
}
else{
console.log(false);
}
Булевы значения и строки
Сравним булево значение со строкой. При этом имеют место два преобразования. Рассмотрим пример и далее пояснения.
var x = "1";
var y = true;
if (x == y){
console.log(true);
}
else{
console.log(false);
}
При сравнении булевых значений со строками преобразование типов в Javascript происходит следующим образом:
Шаг 1 - Булево значение «превращается» в число.
Шаг 2 - Строка «превращается» в число, либо в NaN.
Шаг 3 - Сравнение двух чисел либо числа с «не числом».
По перечисленным выше правилам сравнения и преобразования типов можно правильно определить результат проверки любого равенства.
Ниже рассмотрим еще два варианта равенств, которые могут встречаться и о которых полезно иметь представление.
Сравнение null и undefined. Пустая строка и число
1. Что дает сравнение null и undefined?
2. Каков результат проверки равенства пустой строки и числа?
Комментарии...
сравнение null и undefined: хотя это разные значение (об этом здесь), но в сравнении они дают результат true, так как оба «говорят» об одном и том же - «отсутствие значения» (т.е. отсутствующий, не имеющий значения, объект и переменная без значения).
Что касается сравнения пустой строки с числом, то первая в процессе преобразования дает 0, который в сравнении с любым числом выдаст false.
Если же сравнивать NaN с null или с undefined, то оба результата ЛОЖНЫ - false, так как NaN, как известно, не равно даже самому себе.
Итак, эта заметка была о том, как при помощи оператора проверки равенства «==» (два знака равно) происходит сравнение различных типов данных в Javascript.