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
答案 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)
应该将authorID初始化为布尔变量。
var authorID=true;
if (authorID)
{
//code if true
}
else
{
//code if false
}
您可以在代码中执行以下操作
if (authorID!=null)
{
//code if not null
}
else
{
//code if null
}