为什么布尔值的顺序会影响该程序?

时间:2013-08-17 14:42:17

标签: javascript boolean conditional form-submit

我创建了一个基本程序,用户输入在提交时变为警报。如果我使用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;

3 个答案:

答案 0 :(得分:4)

变量输入永远不会等于布尔值true,因为它是一个字符串。尝试将其更改为:

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

答案 1 :(得分:2)

为了澄清 ferd tomale 的答案,它是其中一个奇怪的&#34;类型转换案例,其中对true的相等性检查的行为与检查false的相等性的方式不同。

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

您可以切换到使用类型安全比较运算符(===!==),它们的行为更加可预测,但您必须自己将值转换为正确的类型。或者,当您使用==!=时,您可以了解JS自动类型转换的怪癖。

答案 2 :(得分:0)

因为您的输入是一个字符串。而string == true将是 false

您可以设置断点来检查它们。