Подтвердить что ты не робот

Почему javascript обрабатывает 0 равным пустой строке?

Возможный дубликат:
Предполагаемое сравнение строк, 0 = '', но 1 = '1'

Выполняя следующий случай в javascript, я получаю 0 равным '' (пустая строка)

var a   =   0;
var b   =   '';//empty string
if(a==b){
    console.log('equal');//this is printed in console
}else{
    console.log('not equal');
}

Может ли кто-нибудь объяснить, в чем причина этого?

4b9b3361

Ответ 1

Цитата doc (MDN):

Равный (==)

Если два операнда не одного типа, JavaScript преобразует операнды затем применяют строгое сравнение. Если либо операнд - это число или логическое значение, операнды, если возможно, преобразуются в числа; еще если любой операнд является строкой, другой операнд преобразуется в если возможно.

Как a тип операнда здесь Number, b также преобразуется в Number. И Number('') оценивается как 0.

Иногда это может быть довольно неожиданно. Рассмотрим это, например:

console.log(0 == '0');  // true
console.log(0 == '');   // true
console.log('' == '0'); // O'RLY?

... или это:

console.log(false == undefined); // false
console.log(false == null);      // false
console.log(null == undefined);  // fal.... NO WAIT!

... и именно поэтому почти всегда рекомендуется использовать оператор === (строгое равенство).

Ответ 2

0, "" (Empty String), false все технически имеют одно и то же значение при приведении типов. Если вам нужно строго их обрабатывать, вы можете использовать ===.

То же самое происходит с аналогичными языками программирования, такими как PHP.

var a = 0;
var b = ''; //empty string
if(a == b){
    console.log('equal'); //this is printed in console
}else{
    console.log('not equal');
}

Чтобы сделать строгое сравнение:

if(a === b){
    console.log('equal');
}else{
    console.log('not equal'); //this is printed in console
}

Ответ 3

Оператор

== в javascript не сравнивает типы, поэтому 0=='' === true (потому что как числовая строка '' оценивается как 0) или 0==false === true (поскольку bool false оценивается как 0) для сравнения типов к вам можно использовать оператор ===.

Здесь вы найдете полезную информацию о сравнении.

Ответ 4

Javascript автоматически преобразует переменные разных типов для сравнения. Это общая черта в не строго типизированных языках.

Если вам нужно сравнить переменные и проверить тип, используйте оператор ===.

Ответ 5

В большинстве языков программирования (включая javascript) "" (string), 0 (integer), \x0 (null) означает одно и то же: "empty". Что происходит, ваш движок javascript находит "" == 0 false, из-за == он преобразует 0 в целое число. Опять же, это неверно, поэтому он преобразует 0 в null, что является ложным, поэтому он преобразует 0 в пустую строку. (Не уверен, что это правильный порядок преобразования). Чтобы сделать условие "точное" совпадение (без преобразования), используйте === inplace ==

Ответ 6

Поскольку пустая строка, представленная как число, равна нулю. Если вы сравниваете яблоки и апельсины, вы должны думать о том, как выглядел бы ваш оранжевый цвет, если бы это было яблоко.

Ответ 7

Из-за принуждения. Обычно лучше использовать === для сравнения в JavaScript.

Ответ 8

Поскольку == проверяет равенство значений, поэтому false, 0 и пустые строки равны. Используйте проверку идентификации ===.

Ответ 9

== делает приведение типов. Всегда используйте ===.

В вашем примере пустая строка b преобразуется в 0. Таким образом, и a, и b являются одинаковыми.