【问题标题】:Why prompt returns sometimes null as string [duplicate]为什么提示有时会返回 null 作为字符串 [重复]
【发布时间】:2016-11-30 13:02:03
【问题描述】:

我的一个朋友通过取消提示问我为什么这段代码不能正常工作。

<script type="text/javascript">
    var name = prompt("Enter your name:", "");
    if (!name) {
        name = "unknown";       
    }
    var ans =("<h2>" + "Hello, "+ name + "!"+"</h2>");      
    document.write(ans);        
</script>

这里是 jsfidle https://jsfiddle.net/085svr3u/

我发现,在上面的例子中,propmt 返回“null”,即。通过取消将 null 作为字符串。我也不知道为什么。

我尝试使用原始代码并对其进行了一些重构。现在它按预期工作。但我还是没有解释。

<script type="text/javascript">

    function test() {
        var name = prompt("Enter your name:", "");
        if (!name) {
            name = "unknown";       
        }
        var ans =("<h2>" + "Hello, "+ name + "!"+"</h2>");      
        document.write(ans);        
    }

    test();
</script>

这里是修改版https://jsfiddle.net/085svr3u/1/

提前谢谢你。

【问题讨论】:

  • sometimes 这个词在 IMO 编程中没有任何意义。它有或没有......"null" 的原因可能是用户输入了null作为prompt中的输入
  • @SLaks 的问题是,为什么null 会变成一个字符串。
  • 您粘贴了两次相同的代码。我想第一个应该没有if 声明?
  • 不,他没有,第二个在函数内@nicael

标签: javascript


【解决方案1】:

这是你的答案

关键字 'name' 在 javascript 中用于全局范围时会导致问题

即使在您的第一种情况下,您将“name”替换为“fname”或其他变量名,它将停止给出 null。

<script type="text/javascript">
    var fname = prompt("Enter your name:", "");
    if (!fname) {
        fname = "unknown";      
    }
    var ans =("<h2>" + "Hello, "+ fname + "!"+"</h2>");     
    document.write(ans);        
</script>

在第二种情况下,变量“name”是在函数内部本地创建的,它与 window.name 不冲突。因此它可以正常工作

【讨论】:

  • @nicael 是的,这里要吸取的教训是将全局变量的使用保持在最低限度。
  • 哦,哈哈,确实如此。对不起!我很傻。
【解决方案2】:

@RahulArora 基本上提供了正确的答案,但要提供更多关于正在发生的事情的说明:

浏览器有一个名为name 的内置全局变量,它存储窗口的名称。如果您为其分配一个值,您分配的值将被转换为一个字符串。这与prompt()无关;你可以这样观察:

var name = null;
console.log(typeof name);  // "string"
console.log(name.length);  // 4

故事的寓意:避免使用全局变量,除非万不得已,如果必须这样做,请确保它们没有被用于其他用途!

【讨论】:

  • 感谢您的进一步澄清。非常感谢
  • @JLRishe 谢谢。我不知道“名称”会是一个全局变量。我也不知道这种“神奇”的转换。
【解决方案3】:

您的问题的一个答案是,当用户通过单击取消或按转义键退出提示框时,它返回 null。

要进一步澄清概念,请阅读以下内容:-

这是功能的正式定义:

result = window.prompt(message, default);

result : 是一个包含用户输入的文本的字符串,或者为空。

message : 是要显示给用户的文本字符串。该参数是可选的,如果提示窗口中没有可显示的内容,可以省略。

default : 是一个字符串,其中包含在文本输入字段中显示的默认值。它是一个可选参数。 注意,在 Internet Explorer 7 和 8 中,如果不提供此参数,则字符串“undefined”为默认值。 (以上来自Mozilla's definition of prompt()

现在我们得出结论:

prompt() 返回 null 或 "string",其中可以包括 ""(空字符串)。

现在我们要检查三个状态:

null :用户点击了取消或按下了 Esc。

""(空字符串) : 用户点击 OK 或按下 Enter 没有文本输入

"string" :用户输入了一些文本。

希望对您有所帮助...!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 2019-05-04
    相关资源
    最近更新 更多