0
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

4 回答 4

2

好吧,JavaScript 是一种非常灵活的语言。很容易被“真实”的价值观所迷惑。

null 和 false 属于那些真实的常见错误。

在您的方法执行之前的某个地方,一个空值被转换为字符串。也许如果您从 DOM 中获取值。

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

对于 JavaScript,这是评估为真:

if("null"){

}

消除这种情况的唯一方法是使用 typeof 检查数据类型并检查正确的值。

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

}
于 2013-07-04T17:22:12.180 回答
1

好的,问题是字符串总是评估为真。你说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";
}
于 2013-07-04T17:12:56.920 回答
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/

于 2013-07-04T17:21:16.987 回答
-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
}
于 2013-07-04T17:13:04.610 回答