为什么" null"工作,但不是空的?

时间:2017-01-14 01:24:13

标签: javascript null

我一直在编写一些与随机数生成有关的代码,我会将用户的名字添加到脚本生成的句子中。

用户通过提示输入答案。我想知道如何检查null,所以我用Stack Overflow上的多个来源给出的答案进行了测试。但是,它不适用于null。奇怪的是,当null作为字符串输入时,它确实有效:"null"。我一遍又一遍地读到null不是字符串,为什么会这样呢? 我的测试代码如下:

<!DOCTYPE html>
<html>
  <head>
    <title>Check</title>
    <script>
      var name = prompt("What's up?");
      function check() {
        if (name === null) {
          document.write("null");
        }
      }
    </script>
  </head>
  <body id="body" onload="check()">
  </body>
</html>

2 个答案:

答案 0 :(得分:2)

当有人输入输入时,脚本会将其作为String接收。因此,如果某人键入 null ,则会转换为&#34; null&#34;,即值为 null 的字符串。因此,当您尝试将其评估为null值时,它不起作用。但是,如果你将它评估为String&#34; null&#34;它会匹配。

编辑:如果您不想允许用户输入null或任何其他恶意值,请创建此类字符串的列表并检查它们。将它们视为字符串值

当您点击取消时,该功能会执行,但由于您取消了该操作,因此将name的值设置为&#34; null&#34;。这就是提示功能的工作原理。 https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt

答案 1 :(得分:0)

问题纯粹是变量名称的选择......即name

具有(几乎)任何其他变量名称的代码将按预期运行&#34;&#34;

全局范围内的

var name = ...window.name = ...

基本相同

现在,window.name被定义为窗口的名称...这通常是一个空字符串。如果你window.open一个窗口,给出一个名字,window.name将是新窗口中的那个值

现在,将null分配给window.name实际上会导致window.name == 'null',因为window.name不能是非字符串类型。事实上,将任何非字符串值分配给window.name将导致window.name具有&#34; .toString()&#34;值

尝试

window.name = true; // window.name will be the string "true";
window.name = {key: "value"}; // window.name will be the string "[object Object]";