Я пытаюсь получить выражение для проверки, если одно поле имеет значение 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
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 и проверках абстрактного равенства.
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);
Это просто. Когда вы пытаетесь сделать + операция true
похожа на 1, а false
равна 0. Тогда, если вы сделаете true+true
, вы получите 2, а два - это не 1, поэтому это не {{ X3 } } .
Для проверки на null и true для проверки на true вы, вероятно, можете сделать:
!null === true
Это может решить это для вас.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.