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

Javascript 为什么布尔值的顺序会影响此程序?,javascript,boolean,conditional,form-submit,Javascript,Boolean,Conditional,Form Submit,我创建了一个基本程序,用户输入在提交时会变成一个警报。如果在if/else语句中使用false而不是true作为第一个条件,我无法理解为什么程序只能按预期工作。我相信这是非常基本的,但我没有找到任何相关的。经过长时间的搜索,我决定把这个问题贴出来。如有任何答复,将不胜感激 HTML: <form id="greetingForm"> <input type="text" name="userInput" id="userInput"/> <input type="

我创建了一个基本程序,用户输入在提交时会变成一个警报。如果在if/else语句中使用false而不是true作为第一个条件,我无法理解为什么程序只能按预期工作。我相信这是非常基本的,但我没有找到任何相关的。经过长时间的搜索,我决定把这个问题贴出来。如有任何答复,将不胜感激

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 == false){
    alert('Say something!');
    }else{
    alert(input);
    }

}

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

window.onload = init;

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

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

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

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

为了澄清ferd tomale的答案,这是一种“奇怪”的类型转换情况,其中对
true
的相等性检查与对
false
的相等性检查的行为方式不同

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

您可以切换到使用类型安全比较运算符(
==
!==
),它们的行为更加可预测,但随后您必须自己将值转换为正确的类型。或者,当您使用
==
时,您可以了解JS自动类型转换的怪癖=
为了澄清费尔德·托马尔的答案,这是一种“奇怪”的类型转换情况,在这种情况下,对
true
的相等性检查与对
false
的相等性检查的行为方式不同

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

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

,因为您的输入是字符串。字符串==true将为false


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

因为您的输入是字符串。字符串==true将为false


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

可能
输入
既不是
也不是
?它是一根绳子吗?(尝试使用一些开发人员工具并观看/播放
输入的值)转到使用
==
==
输入的
可能既不是
真的
也不是
假的
?它是一根绳子吗?(尝试使用一些开发人员工具并观看/播放
输入的值)转到使用
==
==反对
谢谢。在收到这个答案之前,我使用字符串的length属性解决了这个问题。函数输出()。在收到这个答案之前,我使用字符串的length属性解决了这个问题。函数输出()