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 и посмотрите, не по-прежнему ли он дает вам такую ​​же проблему.