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

问题描述 投票:0回答:2

我正在学习 JavaScript 基础知识。我对“真”和“假”的结果感到困惑。谁能告诉一下这是什么原因吗?

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

结果是“假”

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

结果是“真实”

我预计第二个结果是“falsey”。为什么我会得到“真相”?我真的很困惑。

javascript programming-languages
2个回答
4
投票

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

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

另请参阅 JavaScript 中的所有 false 值


0
投票

首先,我将解释您所显示的代码中发生的情况,以确保您理解它。也许你已经明白了前半部分,但既然你说你很困惑,我就假设你没有明白。

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

在这里,您正在查看一个值,

undefined
,并提出一个问题:它是真还是假?基于此您选择一个字符串。然后将该字符串存储到
myVariable
中。它实际上与此代码相同:

var myVariable;
if (undefined) {
    myVariable = 'truthy';
} else {
    myVariable = 'falsey';
}

由于

undefined
始终为 false,因此最后,
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';
}

正如另一位回答者指出的那样,typeof总是会返回,作为字符串,您赋予它的符号的类型。

typeof(someUndefinedVariable);
"undefined"

由于除了空字符串之外的所有字符串都是真值,所以你会得到真值。

Javascript 中只有 7 个 false 值。

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 之外的任何数字
  • 任何数组,包括空数组
  • 任何对象,包括空对象
  • 功能
  • 等等...
© www.soinside.com 2019 - 2024. All rights reserved.