我一直在编写一些与随机数生成有关的代码,我会将用户的名字添加到脚本生成的句子中。
用户通过提示输入答案。我想知道如何检查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>
答案 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]";
等