prompt的返回值竟然能作为if的判断条件!!!?

【要求】
在输入框输入网址,只有当点击确定按钮且输入的网址不为空字符串时,才打开网址。

var url = prompt("请输入网址:","http://segmentfault");
if(判断条件){
    //打开网址
}

【分析和做法】

我们先看下prompt的返回值:
1)点击确定按钮,文本框中的内容将作为返回值。当文本框内容为空时,返回""
2)点击取消按钮,将返回null

1)故要满足条件“只有当点击确定按钮且输入的网址不为空字符串”,我一开始想到的写法是:

if(url != null && url != "")

2)后来发觉就算直接把url作为if的判断条件,即写成:

if(url)

也是可以的,两者的写法等效!

【问题】
都知道if的判断条件应该得Boolean类型的值。显然,prompt的返回值不是Boolean类型,那为什么竟然可以作为if的判断条件??以上两种判断条件写法,那种更提倡?

阅读 6k
4 个回答
if(url){
//url转化为bool类型如同执行Boolean(url)
//输入网址不为空if(url)返回true,执行{}内代码,点击取消Boolean(null)返回false,不执行代码
}

null
undefined
0
空字符串
NaN
这5个值在JS中视为false

呃。。。如果用户点击取消 返回的是null
如果没有输入内容点确定返回的是""
如果输入内容点确定返回的是输入的内容字符串
还是要分别判断比较好
swicth(){
case null;
...
case '';
...
default
...
}

首先,应该明确的是js是弱类型语言;那么这种隐式类型转换在js中存在还是非常常见的;
比如:我们在比较一些值的时候

null == undefined 
1 == '1'
...

if(

程序运行到这里的时候,括号内期望得到一个boolean类型值,所以你给的值就会按照一定的规则被转为true或者false;

)

回到prompt这个方法的返回值这块

var promptString = window.prompt(text,defaultText);

说明:如果用户单击提示框的取消按钮,则返回 null。如果用户单击确认按钮,则返回输入字段当前显示的文本。

BOM提供的这个方法的返回值是一个字符串,可以使用!!promptString的方式获取这个字符串转为boolean值是false或者true

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题