以下代码:
var isBlacklisted = (typeof item.is_blacklisted == "undefined" ? false : true);
console.log(typeof item.is_blacklisted == "undefined");
console.log(isBlacklisted);
输出:
false
true
无论is_blacklisted
是否实际为undefined
,在这两种情况下都会产生相同的结果。
现在我也尝试过:
var isBlacklisted = typeof item.is_blacklisted == "undefined" ? false : true;
var isBlacklisted = (typeof item.is_blacklisted == "undefined" ? false : true);
var isBlacklisted = (typeof item.is_blacklisted === "undefined" ? false : true);
并得到完全相同的结果。我似乎无法弄清楚那里有什么问题,任何见解? 请检查出题
答案 0 :(得分:5)
?
之后的结果就是条件为真时的结果。由于您的条件确实如此,因此三元运算符会导致错误。为了使其正常运行,只需在您的三元组上交换true
和false
:
var isBlacklisted = (typeof item.is_blacklisted == "undefined" ? true : false)
或者甚至不使用三元组,因为你正在使用布尔值:
var isBlacklisted = typeof item.is_blacklisted == "undefined"
我刚检查过您的小提琴,我发现您将属性设置为null
,与undefined 不同。 typeof null
返回object
,而不是undefined
。 。这可能是您混淆的原因。如果您将其设置为undefined
而不是null
,则会获得所需的结果。
答案 1 :(得分:1)
我无法理解你的问题。 在你的小提琴中,你将item.is_blacklisted定义为null。由于null与undefined不同,因此表达式的计算结果为false。这是它的工作原理:
var a = (condition ? result if condition is true : result if condition is false);
你的小提琴输出错误和真实,这是正确的。如果我将null更改为undefined,则控制台输出true和false。
答案 2 :(得分:0)
您是否想使用字符串“undefined”或未定义的JavaScript属性来测试比较?
测试变量是否未定义:
var x;
if (x === undefined) {
txt = "x is undefined";
} else {
txt = "x is defined";
}
txt的结果将是:
x is undefined
undefined属性表示尚未为变量赋值。