2014-03-29 80 views
0

我正在写一个使用switch语句的脚本。当我声明变量时,它们具有默认的布尔值true,是正确的?那么,在switch语句中使用它并不那么重要。默认情况下,JavaScript变量的布尔值是什么?

这里是JavaScript,我有:http://codepen.io/anon/pen/IDLqd/

基本上,我试图做的是问,他们更喜欢基于那进入一个window.prompt的数据是什么类型的列表样式用户() 方法。如果他们输入1,2或3,他们将根据提示中的指示获得一个列表。但是,如果它们没有输入一个有效的整数,则变量validInput的布尔值为false。

从这里开始,运行if语句来检查validInput变量是否具有布尔值true,如果是,则将多个变量的值输出到屏幕,如果不是,则输出文本说“无效的选择“。

为什么代码将if语句中的validInput值识别为false?如果在提示窗口中输入了不同的值,则只赋值false。为了使这个程序正常运行,我必须在每个开关情况下显式地将validInput值定义为true。

这是为什么?有人可以解释吗?

谢谢! Aaron

+3

已声明但未设置的变量默认为'undefined',即“falsey”,即'undefined == false','undefined!= true',但实际上不是false,即undefined!== false, 'undefined!== true'。 – Dave

+0

是不是因为在你的情况下执行将转到默认设置validinput为false,因为它没有事先初始化? – pj013

+0

@Dave:我明白你在说什么,所以从某种意义上说,它可以被认为是空的,null被认为是“假的”。 undefined和null有什么区别?在用于诸如我所拥有的语句之前,总是定义变量总是一个好习惯吗? –

回答

3

Javascript是一种动态语言,没有什么像默认布尔值

当你定义一个变量没有值时,它的默认值总是undefined

var variable; // variable is undefined 

所以你要设置的值

var variable = true; 
// or 
var variable = false; 

如果你想切换这个布尔值,您可以执行以下操作:

variable = !variable; 
+0

谢谢你,我完全明白你在说什么,但我不明白你最后一行,变量!=变量。你为什么要切换这个值?与仅仅定义它相反呢?难道这不会造成某种永无止境的错误? –

+0

+1。这是对的。 – Zafar

+1

@AaronBrewer这只是一个改变布尔值的例子。这可以在应用程序的任何地方完成,例如改变一些国旗的状态。 – friedi

2

您检查是否输入是有效的与

if (validInput == true) { 
    // Your code 
} 

这样做的较为常见的方法是

if (validInput) { 
    // Your code 
} 

什么是这两者之间的区别?

首先检查是否validInput等于true - 什么都没做(当然,几乎没有别的 - 你正在使用==而不是===,有时可有因为JavaScript的类型转换算法令人惊讶的结果,但是这另一个问题)。

要理解第二个,您需要了解JavaScript的“真实性”概念。如果你将一个值放入if语句的条件中,那么javascript决定它是“真y”还是“false-y”,并相应地执行。

true是truthy,因为是任何非零数字,任何非空字符串和任何对象。其他的事情是错误的,包括false0,"",nullundefined

最后这些可能是最相关的你,因为变量是undefined,直到你设置它们。

+0

非常感谢你为这James_pic!我很欣赏答案! :) –

+1

只是为了给出一个类型转换疯狂的例子:如果'validInput'碰巧是一个字符串,那么'validInput == true'只有在validInput ==='1''while validInput '只要'validInput!=='''是真的。 – Robert

相关问题