我正在编写一个使用switch语句的脚本。当我声明变量时,它们的默认布尔值为true,对吗?好吧,当用在switch语句中时,并没有那么多。
以下是我的JavaScript: http://codepen.io/anon/pen/IDLqd/
基本上,我要做的是根据输入window.prompt()方法的数据询问用户他们喜欢哪种类型的列表样式。如果他们输入1,2或3,他们将根据提示中的指示获得一个列表。但是,如果它们没有输入有效的整数,则变量validInput的布尔值设置为false。
从这里开始运行if语句来检查validInput变量是否具有布尔值true,如果是,则将多个变量的值输出到屏幕,如果不是,则输出文本“无效”选择。”
为什么代码会将validInput识别为在if语句中只有false值?如果在提示窗口中输入不同的值,则仅为其指定值false?为了使这个程序正常运行,我必须在每个switch案例中明确地将validInput值定义为true。
这是为什么?有人可以解释一下吗?
谢谢! 亚伦
答案 0 :(得分:3)
Javascript是一种动态语言,没有像默认的布尔值。
当你定义一个没有值的变量时,它的默认值总是undefined
:
var variable; // variable is undefined
所以你必须设置值:
var variable = true;
// or
var variable = false;
如果要切换此布尔值,可以执行以下操作:
variable = !variable;
答案 1 :(得分:2)
您正在检查输入是否有效
if (validInput == true) {
// Your code
}
更常见的方法是
if (validInput) {
// Your code
}
这两者之间有什么区别?
首先检查validInput
是否等于true
- 其他任何事情都没有(好吧,几乎没有别的 - 你使用的是==
而不是===
,由于javascript的类型转换算法,它有时会产生令人惊讶的结果,但这完全是另一个问题。)
要理解第二个,你需要理解javascript的“真实性”概念。如果你把一个值放在if语句的条件中,那么javascript决定它是“truth-y”还是“false-y”,并相应地采取行动。
true
是真实的,任何非零数字,任何非空字符串和任何对象都是真实的。其他事情是假的,包括false
,0
,""
,null
和undefined
。
最后一个可能与您最相关,因为变量为undefined
,直到您将它们设置为某些内容。