好的,我正在使用以下代码。
<html>
<head>
<link type="text/css" rel="stylesheet" href="html.css" />
<script type="text/javascript">
function getName()
{
if(name)
alert("you thought i forgot you" + name + "?");
else
name=prompt("what's your name","here");
}
</script>
</head>
<body onload="var name;">
<p onclick="getName()"; >click here</p>
</body>
</html>
现在,如果第一次单击<p>
文本提示我,如果单击取消而不输入我的姓名,然后再次单击<p>
文本,则不会提示我任何内容,
相反,它显示要填充的名称为NULL。现在在C
,
char a=NULL;
if(a)
评估为false,是不是在javascript中发生?
答案 0 :(得分:4)
您可能遇到的一件事:当您设置全局name
时,您实际上正在设置window.name
。 window.name
是一个特殊属性,即使刷新页面后也会保留。
尝试使用脚本制作页面:
alert(window.name);
name = 'hello';
在第一次运行时,它应该警告“未定义”。但是,如果刷新页面,则应该看到“hello”。
您可以通过将name
重命名为其他内容来避免此问题。
答案 1 :(得分:1)
试试这个
if (name==undefined) name=prompt("what's your name","here"); else alert("you thought i forgot you" + name + "?");
答案 2 :(得分:1)
这个小提琴表现得如你所愿,我想:http://jsfiddle.net/YUCyL/5/
如您所见,我将变量声明移到了头部,并将其重命名为username而不是“name”。
答案 3 :(得分:1)
这是一个棘手的情况。
标识符“name”对于全局窗口对象是特殊的,因此您不能将其可靠地用作变量。
使用例如name$
您的代码按预期工作。
另外我认为“onload”需要表达式,而不是声明;所以你不能那样用它。显然适用于name
,因为这是预定义的。
答案 4 :(得分:0)
<html>
<head>
<link type="text/css" rel="stylesheet" href="html.css" />
<script type="text/javascript">
var name;
function getName() {
console.log(name, typeof name);
if(name && name !== 'null') {
alert("you thought i forgot you" + name + "?");
} else {
name=prompt("what's your name","here");
}
}
</script>
</head>
<body>
<p onclick="getName()"; >click here</p>
</body>
</html>
从控制台输出中可以看到,name是一个值为null的字符串。这是非常愚蠢的,但我想window.name将值字符串化,在本例中为null。
编辑:
您可能不应该使用单词name,因为它是保留的(在窗口中用作属性)。
window.name返回存储在其中的任何内容的字符串值。例如:
window.name = null;
window.name === 'null'
true
window.name === null
false