2013-08-17 2 views
0

Я создал базовую программу, в которой пользовательский ввод превращается в оповещение при представлении. Я не могу понять, почему программа работает только по назначению, если я использую false, а не true, как первое условие в инструкции if/else. Я уверен, что это очень просто, но мне не удалось найти ничего актуального. После долгого поиска я решил опубликовать вопрос. Любые ответы будут очень благодарны.Почему порядок булевских значений влияет на эту программу?

HTML-:

<form id="greetingForm"> 
<input type="text" name="userInput" id="userInput"/> 
<input type="submit" value="click" id="submit"/> 
</form> 

Разбитый сценарий:

function output(){ 
var input = document.getElementById('userInput').value; 

    if(input == true){ 
    alert(input); 
    }else{ 
    alert('Say something!'); 
    } 

} 

function init(){ 
var greetingForm = document.getElementById('greetingForm'); 
greetingForm.onsubmit = output; 
} 

window.onload = init; 

Рабочий сценарий:

function output(){ 
var input = document.getElementById('userInput').value; 

    if(input == false){ 
    alert('Say something!'); 
    }else{ 
    alert(input); 
    } 

} 

function init(){ 
var greetingForm = document.getElementById('greetingForm'); 
greetingForm.onsubmit = output; 
} 

window.onload = init; 
+0

Возможно, 'input' не является ни истинным, ни ложным? Это строка? (Попробуйте использовать некоторые инструменты для разработчиков и наблюдайте/играйте со значением 'input') –

+0

Перейдите к использованию' === 'или'! == 'против' '' '' –

ответ

2

Для уточнения Ferd tomale ответ «s, это одна из„странных“случаев преобразования типа, где проверка равенства true не ведут себя таким же образом, как проверка на равенство до false.

"" == false -> true 
"a" == false -> false, but 
"" == true -> false 
"a" == true -> false 

Вы можете переключиться на использование типизированных операторов сравнения (===, !==), которые ведут себя гораздо более предсказуемы, но тогда вам придется конвертировать значения в правильный тип самостоятельно. Или вы можете узнать причуды автоматического преобразования типа JS при использовании == или !=.

+0

И источник всех странностей подробно описан здесь: http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3 – bfavaretto

4

Входная переменная никогда не будет равен булево истинной, потому что это строка. Попробуйте изменить его:

function output(){ 
    var input = document.getElementById('userInput').value; 
    if(input != ""){ 
    alert(input); 
    }else{ 
    alert('Say something!'); 
    } 
} 
+0

Спасибо. До получения этого ответа я работал вокруг него, используя свойство length строки. функция выход() { var input = document.getElementById ('userInput'). Значение; if (input.length> = 1) { предупреждение (ввод); } else { alert («Скажи что-нибудь!»); } } – Liam89

0

Потому что ваш ввод - это строка. И строка == true будет false.

Вы можете установить контрольные точки, чтобы их проверить.

Смежные вопросы