JavaScript自动类型转换+循环

JavaScript自动类型转换+循环,javascript,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); cons

这里有个问题

情景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);
即使键入内容或单击“确定”或“取消”,也会不断询问姓名。它只是卡住了。无限循环

在场景1中,程序的工作方式如下: 当你的名字是虚假的,虚假的意思未定义时,请询问你的名字。如果yourName获得定义的值console.log,则记录名称。 我知道空字符串在布尔值中转换为false。我也知道,它是由假变真,因为!在被否定之前!从真到假。因此,如果程序通过单击“确定”或“取消”来获取空字符串,那么它将获取原始的false,并将其转换为true,然后将转换后的true与!回到false,这就是为什么只要你不输入它,它就会一直要求你输入一个名字。当您键入某个内容时,键入的值为true,它将被检查!,我们返回true,它正在被console.log记录

在场景2中,程序的工作方式与第一种情况几乎相同,但它不接受任何类型化的值,因为当您键入某个内容时,它在布尔值中为true,true!=真会给我们假,所以它会再次询问名字。但关于第二种情况,我不明白的是:当您单击“确定”或“取消”时,它们会被转换为false,false!=true为true,应传递并记录空字符串

我想我理解错了,或者…我甚至不知道。请给我解释一下这些家伙

这也很奇怪:

do { var yourName = prompt("Who are you?"); } while (typeof(yourName) != true); console.log(yourName);

情景1:

do { var yourName = prompt("Who are you?"); } while (!yourName); console.log(yourName);
Cancel返回null,OK返回空,两者都满足!你的名字

相反,只需通过添加条件yourName来检查用户是否单击了取消!=空的

演示

做{ var yourName=prompt你是谁?; }一会儿!你的名字&你的名字!=无效的 console.logyourName 当你使用!yourName,空字符串为falsy,非空字符串为truthy,因此布尔条件为true

当你使用你的名字时!=则两个操作数都转换为一个数字,然后进行比较:。这意味着将字符串“1”与true进行比较的结果为true

console.log和true:,+,+true; console.log'yourname'和true:,+'yourname',+true; log'true'和true:,+'true',+true;
console.log'1'和true:,+1',+true;我是唯一一个在现实生活中从来没有使用过do的人吗D