Javascript, если условие на boolean

Можете ли вы объяснить, почему условие if не работает без функции eval:

var myBoolean= document.getElementById("someBoolean").value;  //This is a 'false'

if(myBoolean)
{ 
  alert(Your boolean is True);  //This condition always getting executed even though myBoolean is false;
}

if(eval(myBoolean))
{
 alert("You will never see this alert bcoz boolean is false");
}

Ответ 1

В Javascript следующие значения рассматриваются как false для условных выражений:

  • false
  • null
  • undefined
  • Пустая строка ''
  • Число 0
  • Число NaN

Все остальное рассматривается как true.

'false' не имеет ничего общего, поэтому true.

Ответ 2

Строка 'false' оценивается как boolean true

Ответ 3

Это потому, что на самом деле это не логическое значение, это строка 'false'. Когда вы конвертируете строку в логическое значение, '' есть false, а что-то еще true.

Вы проверяете, соответствует ли она строке 'false' (или 'true') или нет.

var myBoolean = 'false'; // (string)
myBoolean = myBoolean !== 'false'; //false (boolean)

Ответ 4

'false' == true, достаточно сумасшедший из-за неявного принуждения типа JavaScript. Ознакомьтесь с этими другими примерами из Crockford Элементы стиля JavaScript.

'' == '0'//false
0 == ''//true

0 == '0'//true

false == 'false'//false
false == '0'//true

false == undefined//false
false == null//false

null == undefined//true

'\ t\r\n' == 0//true

Вы можете решить эту проблему, изменив код на что-то вроде

var myBoolean = document.getElementById("someBoolean").value === "true"

Кроме того, почти всегда лучше использовать!! и === а не! и ==

Ответ 5

document.getElementById( "someBoolean" ) не возвращает логическое значение true/false, он возвращает элемент или undefined/null

вы можете отменить свою логику и получить ожидаемый результат:

    if(!myBoolean)
    { 
      alert('This element does not exist');
    }

    if(!eval(myBoolean))
    {
     alert("Do not know why you would ever want to do this");
// you could do typeof() 
    }

Ответ 6

Try:

var myBoolean= document.getElementById("someBoolean").value;  //This is a 'false'

if(myBoolean != "false")
{ 
  alert(Your boolean is True);  //This condition always getting executed even though myBoolean is false;
}

Как и другие, строка не является логическим значением, поэтому использование ее, как если бы оно было, приведет к логической ошибке.

Ответ 7

Строка - это логическое значение истины в соответствии с ECMA

var a = ""<br/>
a&&false //-> false<br/>
a||false //-> "" (truthy)<br/>