Javascript: проверка логических значений
У меня есть логическое значение, заданное как скрытая переменная в форме, и у меня есть javascript ниже.
$().ready(function() {
var flag = $('#popUpFlag').val();
alert("flag = "+flag);
if(flag){
alert("flag is true");
}else{
alert("flag is false");
}
})
Это выходы для предупреждения.
flag =
flag is false
flag = false
flag is false
flag = true
flag is false
Моя забота, очевидно, является третьим выходом. Когда флаг является истинным, почему печать "flag is false", а не "flag is true". Я тестировал его в IE8 и FF 4
Предложения приветствуются.
Ответы
Ответ 1
Нет, вы не имеете логического значения в скрытом поле. Значение в поле всегда является строкой.
Когда вы используете строковое значение, как если бы оно было логическим значением, вы получаете неожиданные результаты. Условие является ложным, если значение false
, 0
, ""
или null
, но строка "false"
не является, поэтому она оценивается как true
.
Если вы хотите логическое значение, вам нужно проанализировать строку. Простым способом является просто проверить, имеет ли строка определенное значение:
var flag = $('#popUpFlag').val() === 'true';
Ответ 2
flag
- это строка, поэтому вместо этого:
if (flag === "true") {
//true
}
else if (flag === "false") {
//false
}
Ответ 3
Хмм... Я подозреваю, что значение, которое вы используете, является строкой, поэтому вы видите значение правильно в предупреждении, но не тогда, когда оно пытается посмотреть на него как логическое.
Как преобразовать строку в boolean в JavaScript?
Просто попробуйте ocnverting для boolean и посмотрите, не по-прежнему ли он дает вам такую же проблему.