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/>