如果变量不为null打印它:null我很困惑

时间:2013-07-04 17:01:38

标签: javascript

if (authorID) {
    console.log(authorID);
    $.ajax({
    -ajax stuff-
    )}
} else window.location.href="notLoggedIn.html";

好吧这是我的问题:在控制台authorID(一个字符串)中 打印出来并打印为null。 我的问题是:为什么会发生这种情况?由于authorID为null,不应该是执行的else块吗?

我是Javascript / jQuery的新手,所以我想我可能只是错过了一些显而易见的事情,但我自己无法想象。

编辑:这里是如何创建authorID的:

if (session.getAttribute("authorID")!= null) {
    authorID = session.getAttribute("authorID").toString();
} 

因为我正在测试而没有登录我希望session.getAttribute()返回null

4 个答案:

答案 0 :(得分:2)

嗯,JavaScript是一种非常灵活的语言。很容易被“truthy”值混淆。

null和false属于那些 truthy 常见错误。

在方法执行之前的某处,将null值转换为字符串。也许你从DOM获得价值。

这就是为什么在调试时,你会看到“null”被写入输出。但实际上你将“null”作为字符串而不是null的原始值。

对于JavaScript,它的计算结果为true:

if("null"){

}

消除此问题的唯一方法是使用typeof检查数据类型并检查正确的值。

if(a !== null && a !== "null"){

}

答案 1 :(得分:1)

好的,问题是字符串始终计算为true。你说authorID是一个字符串;因此if (authorID)将始终评估为真。

您可以做的是测试您的'authorID'字符串是否不等于'null':

if (authorID !== 'null')

我想你只想在'authorId'等于字符串'null时才发生页面重定向,所以你的代码看起来像这样:

if (authorID !== 'null') {
    console.log(authorID);
    $.ajax({
    // -ajax stuff-
    )}
} else {
    window.location.href = "notLoggedIn.html";
}

,现在您已编辑了问题以显示'authorID'的定义方式:

将该块更改为:

if (session.getAttribute("authorID")) {
    authorID = session.getAttribute("authorID").toString();
} else {
    authorID = null;
}

然后您可以使用原始条件:

if (authorID) {
    console.log(authorID);
    $.ajax({
    // -ajax stuff-
    )}
} else {
    window.location.href = "notLoggedIn.html";
}

答案 2 :(得分:0)

我建议阅读:http://saladwithsteve.com/2008/02/javascript-undefined-vs-null.html

在您的情况下,该文章的结尾显示您所犯的错误:

if (foo == null) {
       foo = "Joe";
    }

等于:

if (!foo) {
       foo = "Joe";
    }

我做了一个快速的jsfiddle,希望能更好地为你拼出:http://jsfiddle.net/vp9Fa/1/

答案 3 :(得分:-1)

传递if条件的

应该将authorID初始化为布尔变量。

var authorID=true;

if (authorID)
{
  //code if true
}
else
{
 //code if false
}
您可以在代码中

执行以下操作

if (authorID!=null)
{
 //code if not null
}
else
{
 //code if null
}