一、存在问题
在写demo时,发现的一个问题。就是prompt()方法弹出的对话框点击取消按钮时,获取到的值应该是null,我却获取到"null"。
二、问题分析
我的demo是:
<script>
var name = '';
while(name == '' || name == null){
name = prompt('请输入你的账号:',"");
}
</script>
按理来说,prompt()方法浏览器弹出对话框不输入内容点击确定按钮获取到的是''
,直接点击取消按钮就会获取到null。那我这里的判断通过不了,就会继续弹出对话框给用户输入。
但是,当我点击取消按钮时,对话框关闭了没有继续弹出。
我对demo进行修改:
<script>
var name = '';
while(name == '' || name == null){
name = prompt('请输入你的账号:',"");
}
console.log(name);
console.log(name == '');
console.log(name == null);
console.log(typeof(name));
</script>
浏览器弹出对话框,我点击取消按钮,控制台打印:
说明我获取到的值是"null",而不是null。
我怀疑是我前面声明var name ='';
使后面获取的值是string类型,于是我把demo改为:
<script>
while(name == '' || name == null){
var name = prompt('请输入你的账号:',"");
}
console.log(name);
console.log(name == '');
console.log(name == null);
console.log(typeof(name));
</script>
结果还是一样,我去网上看了下,有人也碰到类似问题,原来是变量名引起的,把name换成name1,就可以达到我要的效果。
<script>
//while(name1 == '' || name1 == null){
var name1 = prompt('请输入你的账号:',"");
//}
console.log(name1);
console.log(name1 == '');
console.log(name1 == null);
console.log(typeof(name1));
</script>
这次点击对话框的取消按钮,获取到的值是null。
三、问题由来
name是JavaScript中内置的值,在菜鸟课程网站里提及点击查看
找个空白页面,去浏览器控制台测试下:
我没有声明任何变量,控制台打印a会报错,打印name则是字符串""
。
四、总结
(1)平时命名变量名时,为了避免出现奇怪的问题,我们要尽量避免使用JavaScript中内置的值,例如name。
(2)prompt()方法弹出的对话框,当不输入内容时点击确定按钮获取到的值是''
,当点击取消按钮时获取到的值是null。