我在JS的冒险开始,所以我有一个问题。我创建了一个小程序,询问你的名字,然后打印出来。而且我想知道为什么这两个序列不能给我相同的结果。如果我没有输入任何东西,这个程序不应该打印任何东西,但在第一种情况下它打印出来,我不知道它为什么会这样做。
do {
var name = prompt("Who are you?");
} while (name === false);
console.log(name);
do {
var name = prompt("Who are you?");
} while (!name);
console.log(name);
谢谢:)
答案 0 :(得分:2)
提示返回一个字符串,因此name变量是一个字符串。
对于===工作,双方需要是同一类型。
在这种情况下,左侧是字符串,右侧不是。
答案 1 :(得分:1)
prompt()
will never return false
。
它可能返回一个空字符串,或null
(如果使用取消/ ESC) - 其中任何一个都满足while (! name)
- 但这些都不等于false
}。
答案 2 :(得分:0)
来自https://developer.mozilla.org/en-US/docs/Web/API/Window.prompt:
语法
result = window.prompt(text,value);
result是一个包含用户输入的文本的字符串,或者值为null。
将您的=== false
更改为=== null
并再试一次。底线window.prompt
不会返回布尔值,因此严格的相等检查失败。
答案 3 :(得分:0)
将值与布尔值进行比较不同于将值转换为布尔值。
x === false
确实在测试x
是否具有值false
。但!x
将 x
转换为布尔值。所以这些是执行的两个不同的操作:
// if (x === false)
(x === false) === true
// if (!x)
(!Boolean(x) === true)
下一条信息是知道不同类型的值如何转换为布尔值。这被定义为spec。这是一段摘录:
null
:false
undefined
:false
String:如果参数为空String(其长度为零),则结果为
false
;否则结果为true
。
如果您未提供值,则name
将是空字符串,将转换为布尔值false
,但不是值false
。
答案 4 :(得分:0)
首先,您希望在name
null 而不是错误的情况下运行脚本吗?
另外,关于等于,请注意
true == 1; // correct!
"2" == 2; // correct!
虽然
true === 1; // false
"2" === 2; // false
这是因为===
意味着相同。在比较发生之前,==
会尝试将任意一方转换为任何等效值。