【问题标题】:By Default, What Is A JavaScript Variables's Boolean Value?默认情况下,什么是 JavaScript 变量的布尔值?
【发布时间】:2014-03-29 17:57:33
【问题描述】:

我正在编写一个使用 switch 语句的脚本。当我声明变量时,它们的默认布尔值为 true,对吗?好吧,在 switch 语句中使用时并没有那么多。

这是我的 JavaScript: http://codepen.io/anon/pen/IDLqd/

基本上,我想做的是根据输入到 window.prompt() 方法中的数据询问用户他们喜欢哪种类型的列表样式。如果他们输入 1、2 或 3,他们将根据提示中的指示获得一个列表。但是,如果他们没有输入有效整数,则变量 validInput 将设置为布尔值 false。

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

为什么代码会在 if 语句中将 validInput 识别为仅具有 false 值?如果在提示窗口中输入不同的值,则仅为其分配值 false ?为了让这个程序正常运行,我必须在每个 switch case 中明确地将 validInput 值定义为 true。

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

谢谢! 亚伦

【问题讨论】:

  • 已声明但未设置的变量默认为undefined,即“假”,即undefined == falseundefined != true,但实际上并非假,即undefined !== falseundefined !== true
  • 这不是因为在您的情况下执行将转到默认值并将validinput设置为false,因为它没有事先初始化?
  • 顺便说一句,您在声明中使用了逗号和多个vars;选择一种风格或另一种风格,你不能同时使用这两种风格。
  • undefined == nullundefined !== null。未定义的字面意思是;它没有被定义为任何东西。而 null 是一种空白对象(如果您有 C 或 Java 背景,这更有意义)。在 JavaScript 中,这种区别并不是真正必要的,但在检查哪些参数被发送到函数时可能很有用。只要记住undefinednullfalse0''都是“假”的(还有一堆像'0'这样的字符串),但它们都是不同的。
  • 不,您不需要 将所有变量显式设置为某个值。如果您对默认的undefined(有时还可以)感到满意,那么只需var a; 语句就足够了。请记住,它真的更像var a = undefined;

标签: javascript switch-statement


【解决方案1】:

Javascript 是一种动态语言,没有什么比得上默认的布尔值

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

var variable; // variable is undefined

所以你必须设置值

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

如果要切换此布尔值,可以执行以下操作:

variable = !variable;

【讨论】:

  • 谢谢你,我绝对明白你在说什么,但我不明白你最后一行,变量!=变量。你为什么要这样切换值?而不是仅仅定义它?这不会造成某种永无止境的错误吗?
  • @AaronBrewer 这只是更改布尔值的示例。这可以在您的应用程序中的任何地方完成,例如改变一些标志的状态。
  • 我想你是想写variable = !variable;
  • @friedi:谢谢你! :)
【解决方案2】:

您正在检查输入是否有效

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

更常见的做法是

if (validInput) {
  // Your code
}

这两者有什么区别?

第一个检查 validInput 是否等于 true - 没有其他方法(嗯,几乎没有其他方法 - 您使用的是 == 而不是 ===,这有时会产生令人惊讶的结果,因为javascript 的类型转换算法,但这完全是另一个问题)。

要理解第二个,你需要理解javascript的“真实性”概念。如果你在 if 语句的条件中输入一个值,那么 javascript 会判断它是“true-y”还是“false-y”,并采取相应的行动。

true 是真实的,任何非零数字、任何非空字符串和任何对象都是真实的。其他的都是假的,包括false0""nullundefined

其中最后一个可能与您最相关,因为变量是undefined,直到您将它们设置为某个值。

【讨论】:

  • 非常感谢 James_pic!我很感激答案! :)
  • 只是为了举例说明类型转换的疯狂:如果validInput恰好是一个字符串,那么validInput == true只有在validInput === '1'为真而validInput为真时为真只要validInput !== ''.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 2014-03-23
相关资源
最近更新 更多