这里有一个问题的菜鸟。
情景1:
do { var yourName = prompt("Who are you?"); } while (!yourName); console.log(yourName);
如果在提示框中输入了某些内容,则返回一个字符串。 如果您没有输入任何内容并单击"确定",它会继续询问姓名。如果您点击"取消",它仍会继续询问。
情景2:
do { var yourName = prompt("Who are you?"); } while (yourName != true); console.log(yourName);
即使您输入内容或点击&#34,也请继续询问姓名;确定"或"取消"。它只是卡住了。无限循环?
在方案1中,程序的工作方式如下: 当yourName为false时执行此操作(询问名称)(false表示未定义)。如果yourName获取定义的值console.log名称。 我知道空字符串("")在布尔值中转换为false。而且我也知道它因为错误而被转换为真实!在被否定之前!从真实到虚假。因此,如果程序通过单击&#34获得空字符串; OK"或者"取消",它得到原始的假,转换为真,然后转换的真值被否定!回到假,这就是为什么只要你不输入它就一直要求输入一个名字。当你输入某些内容时,输入的值为true,它会被!检查,我们返回true并且它是console.logged。
在场景2中,程序几乎与第一种情况一样,但它不接受任何类型的值,因为当你输入某些东西时,在布尔值中是真的,true!= true会给我们假,所以它会问再次提名。但这是我对第二种情况的理解:当你点击" OK"或"取消",它们被翻译为false,而false!= true为true,应该传递,console.log为空字符串。
我想我理解错了或者......我甚至都不知道。请解释一下这些人。
这也很安静:
do { var yourName = prompt("Who are you?"); } while (typeof(yourName) != true); console.log(yourName);
和
do { var yourName = prompt("Who are you?"); } while (typeof(yourName) != false); console.log(yourName);
答案 0 :(得分:1)
情景1:
取消返回null
,确定返回空""
,两者都满足!yourName
。
而是通过添加条件yourName != null
来检查用户是否点击了取消
<强>演示强>
do {
var yourName = prompt("Who are you?");
} while (!yourName && yourName != null);
console.log(yourName);
情景2:
确定不会返回布尔值,因此yourName != true
永远不会失败 - 因此此场景中的无限循环也是如此。
答案 1 :(得分:0)
当你使用!yourName
时,空字符串''
是假的,非空字符串是真的,所以布尔条件为真。
当您使用yourName != true
时,两个操作数都会转换为数字,然后进行比较:loose comparison with ==
。这意味着将字符串'1'
与true
进行比较的结果为真。
console.log("'' and true:", +'', +true);
console.log("'your name' and true:", +'your name', +true);
console.log("'true' and true:", +'true', +true);
console.log("'1' and true:", +'1', +true);
&#13;
这是JavaScript刚刚为您提供的地方之一。使用!yourName
这一点非常普遍,但明确(yourName != null && yourName != '')
不会受到伤害。