关于prompt的返回值问题?

使用prompt获取用户输入,关于返回值有如下问题,请指:

<script type="text/javascript">
    var name = prompt("请输入您的姓名:");

    if(name != null){
        document.write("你好"+name);
    }else{
        document,write("bye");
    }
</script>

问题如下:
1,当我不输入任何东西时,直接点击确定,输出“你好”二字,什么原因?
2,当我不输入任何东西,点击取消时,输出“你好null”,什么原因?
3,我看教程上写的是点击确定,将输入框中的内容作为返回值,当点击取消,返回值为null,但是这却与我以上代码的点击取消的结果相违背,什么原因呢?
谢谢

阅读 9.7k
5 个回答
  • 直接点击确定,由于你没有输入任何内容,获取内容的获取的就是''prompt函数返回值为'',于是name被赋值为'', '' != null。判断为真,于是就输出了你好

  • 同理点击取消,prompt函数返回值为null,同样赋值给了name,这是name的值为字符串'null''null'!=null。判断为真,于是就输出了你好null(更新一下,再次模拟,发现了问题所在,由于调试工具内直接模拟测试,由于name是关键字,赋值给name会强制转换类型为字符串'null',导致了你我后续的问题)

  • 综上第一就是返回的输入框的内容,由于你没没输入内容,所以内容为'';第二就是你点击取消,返回的的确是null,问题出在赋值这里转换了类型。所以要得到你的结果可以这样。

    var username = prompt("请输入您的姓名:");
    
    if(username != '' && username != null){
        document.write("你好"+username);
    } else {
        document.write("bye");
    }

    问题发现

没输入任何东西,点击确定,输入框的为空字符串,而 "" != null 是 true

第一个,因为""空字符串不等于null。
第二个,我无法重现,无论在edge还是chrome,prompt取消后返回的都是null,而不是某个回答里说的"null"字符串,题主可以说下运行环境吗。

新手上路,请多包涵

楼主好,首先,你给的代码是不是有点小问题呢,<document.write>还是<document,write>,这都不影响你的程序,说明你是在console里执行的吧。
我在console里也写了和你一样的代码,点击取消出现了“你好null”,说明就没有执行else。
建议你套一个函数定义,然后调用,就可以解决这个问题啦

新手上路,请多包涵

这个问题很简单
1.直接点击确定,由于你没有输入任何内容,获取内容的获取的就是'',prompt函数返回值为'',于是name被赋值为'', '' != null。判断为真,于是就输出了你好
2.同理点击取消,prompt函数返回值为'null','null'!=null。判断为真,于是就输出了你好null,你可已alert(name)看一下 就明白了.

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