Javascript 为什么布尔值的顺序会影响此程序?
我创建了一个基本程序,用户输入在提交时会变成一个警报。如果在if/else语句中使用false而不是true作为第一个条件,我无法理解为什么程序只能按预期工作。我相信这是非常基本的,但我没有找到任何相关的。经过长时间的搜索,我决定把这个问题贴出来。如有任何答复,将不胜感激 HTML: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="
<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属性解决了这个问题。函数输出()