“truthy”和“falsey”的结果在JavaScript中令人困惑

时间:2016-02-01 14:26:49

标签: javascript scripting programming-languages

我正在学习JavaScript基础知识。我对“truthy”和“falsey”的结果感到困惑。有人能说出原因吗?

myVariable = undefined ? "truthy" : "falsey";

结果是“falsey”

myVariable = typeOf someUndefinedVariable ? "truthy" : "falsey";

结果是“truthy”

我期待“假”而不是第二个结果。为什么我得到“真相”?我真的很困惑。

2 个答案:

答案 0 :(得分:2)

typeof返回值的类型 name ,它始终是非空字符串。非空字符串是 truthy

> typeof someUndefinedVariable
"undefined"
> typeof (typeof someUndefinedVariable)
"string"
> Boolean("undefined")
true

另见All falsey values in JavaScript

答案 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中的所有其他值都是真实的。

  • 除空字符串
  • 之外的任何字符串
  • 除0
  • 之外的任何数字
  • 任何数组,包括一个空数组
  • 任何对象,包括空对象
  • 功能
  • 等...