我正在学习JavaScript基础知识。我对“truthy”和“falsey”的结果感到困惑。有人能说出原因吗?
myVariable = undefined ? "truthy" : "falsey";
结果是“falsey”。
myVariable = typeOf someUndefinedVariable ? "truthy" : "falsey";
结果是“truthy”。
我期待“假”而不是第二个结果。为什么我得到“真相”?我真的很困惑。
答案 0 :(得分:2)
typeof
返回值的类型 name ,它始终是非空字符串。非空字符串是 truthy 。
> typeof someUndefinedVariable
"undefined"
> typeof (typeof someUndefinedVariable)
"string"
> Boolean("undefined")
true
答案 1 :(得分:0)
首先,我将解释您所显示的代码中发生的事情,以确保您理解它。也许你已经理解了上半场,但既然你说你很困惑,我会认为你没有。
myVariable = undefined ? "truthy" : "falsey";
// result: "falsey"
在这里,您正在查看一个值undefined
,并提出一个问题:它是真的还是虚假的?基于此,您选择一个字符串。然后将该字符串存储到myVariable
。它实际上与此代码相同:
var myVariable;
if (undefined) {
myVariable = 'truthy';
} else {
myVariable = 'falsey';
}
由于undefined
总是假的,最后myVariable
包含字符串'falsey'
。
以下是您的第二段代码:
myVariable = typeOf someUndefinedVariable ? "truthy" : "falsey";
// result: "truthy"
首先,我必须指出typeOf
不是我所知道的任何Javascript运行时中的有效函数或运算符。我会假设这是一个错字,你打算用typeof
代替。上面的代码,如上所述,应该抛出语法错误。更正了,我们......
myVariable = typeof someUndefinedVariable ? "truthy" : "falsey";
// result: "truthy"
为清楚起见,我们将其重写为if / else:
var myVariable;
if (typeof someUndefinedVariable) {
myVariable = 'truthy';
} else {
myVariable = 'falsey';
}
当另一个回答者有pointed out时,typeof将始终返回作为字符串,即您给它的符号类型。
typeof(someUndefinedVariable);
"undefined"
因为除了空字符串之外的所有字符串都是真实的,所以你会得到真正的回报。
Javascript中只有7个falsey值。
false Boolean false
undefined If a symbol is not defined at all
null A defined symbol, but it has no value inside
0 Numeric positive 0
-0 Numeric negative 0
'' or "" Empty string
NaN Magic value "Not a Number"
Javascript中的所有其他值都是真实的。