如果(NULL),它会起作用吗?

时间:2011-07-04 06:38:31

标签: javascript

好的,我正在使用以下代码。

 <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中发生?

5 个答案:

答案 0 :(得分:4)

您可能遇到的一件事:当您设置全局name时,您实际上正在设置window.namewindow.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