JavaScript自动类型转换+循环

时间:2018-02-15 11:37:07

标签: javascript

这里有一个问题的菜鸟。

情景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);

2 个答案:

答案 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进行比较的结果为真。

&#13;
&#13;
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;
&#13;
&#13;

这是JavaScript刚刚为您提供的地方之一。使用!yourName这一点非常普遍,但明确(yourName != null && yourName != '')不会受到伤害。