我创建了一个基本程序,用户输入在提交时变为警报。如果我使用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 :(得分: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 。
您可以设置断点来检查它们。