如果变量不为空,请打印它:空,我很困惑

if variable ain't null print it: null i'm confused

本文关键字:变量 如果 打印      更新时间:2023-09-26
if (authorID) {
    console.log(authorID);
    $.ajax({
    -ajax stuff-
    )}
} else window.location.href="notLoggedIn.html";

好的,这是我的问题:在控制台authorID(字符串(中确实被打印出来,并且打印为null。我的问题是:为什么会这样?由于 authorID 为空,因此不应该是执行的 else 块吗?

我真的是Javascript/jQuery的新手,所以我想我可能只是错过了一些明显的东西,但自己无法弄清楚。

编辑:以下是创建作者ID的方式:

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

由于我在没有登录的情况下进行测试,我希望 session.getAttribute(( 返回 null

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

空和假属于那些真实的常见错误。

在方法执行之前的某个地方,空值已转换为字符串。也许如果你从 DOM 获得值。

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

对于 JavaScript,计算结果为 true:

if("null"){
}

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

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

好的,问题是字符串的计算结果始终为 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";
}

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

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

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

等于:

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

我做了一个快速的jsfidd,我希望能更好地为您拼写:http://jsfiddle.net/vp9Fa/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
}