Я пытаюсь получить выражение для проверки, если одно поле имеет значение null и обрабатывать как ложное

a=true
b=true
-------------
true

 a=null
 b=true
 -------------
 true

Но когда я выполню:

var a=true;
var b=true;
alert((a+b) == true);   => false

Он возвращает ложь, я не понимаю.

var a=null;
var b=true;
alert((a+b) == true);   => true
1
JavaSheriff 27 Авг 2017 в 19:53

4 ответа

Лучший ответ

Общее решение для этого в javascript - использовать !! для анализа логического значения. !! дважды отрицает правдивость, в результате чего логическое значение имеет ту же правдивость оригинала.

Затем вы должны использовать && как логическую операцию and.

var a=null;
var b=true;
console.log(!!a && !!b);   // false

Изменить: приложение о странном + поведении

Странность, которую вы видите, когда используете + вместо &&, заключается в том, что в JavaScript + приводит логические значения к целым числам, а true становится 1 и { {X5}} становится 0.

Следовательно

true + true \\ 2
true + false \\ 1

А потом при выполнении

true + true == true

Левая часть сравнения на равенство преобразуется в 2, затем JavaScript приводит правую часть к 1, и поэтому проверка на равенство завершается неудачно.

При выполнении

null + true == true

Левая часть становится целым числом 1, а затем правая.

Я бы порекомендовал прочитать руководство по MDN для сравнения равенства и сходства для получения дополнительной информации о приведении значений в JavaScript и проверках абстрактного равенства.

6
Robin James Kerrison 27 Авг 2017 в 17:07
var a = true;
var b = true;

console.log((a & b) === 1);

var c = null;

console.log((a & c) === 1);

{{Х0}} Это важно. Когда вы преобразуете true в число, оно будет 1

Тогда true + true == true становится 2 == 1 который false

Аналогично null + true == true становится 1 == 1, что верно, потому что null разрешается в 0

Я думаю, что вы собираетесь проверить null неправильным способом.

Пытаться

alert((a & b) === 1); 
2
Matthew Ciaramitaro 27 Авг 2017 в 17:08

Это просто. Когда вы пытаетесь сделать + операция true похожа на 1, а false равна 0. Тогда, если вы сделаете true+true, вы получите 2, а два - это не 1, поэтому это не {{ X3 } } .

1
Samuel Tulach 27 Авг 2017 в 17:05

Для проверки на null и true для проверки на true вы, вероятно, можете сделать:

!null === true

Это может решить это для вас.

1
tyskr 27 Авг 2017 в 16:58