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

Results of "truthy" and "falsey" is confusing in JavaScript

本文关键字:JavaScript 结果 truthy falsey      更新时间:2023-09-26

我正在学习JavaScript基础知识。我对"真实"和"虚假"的结果感到困惑。谁能说出原因呢?

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

结果是"假的"。

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

结果是"真实"。

我期望第二个结果是"假的"。为什么我变得"真实"?我真的很困惑。

typeof返回值的类型名称,该名称始终为非空字符串。非空字符串是真实的

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

参见 JavaScript 中的所有错误值

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

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';
}

正如另一位回答者所指出的,typeof 将始终以字符串形式返回您赋予它的符号类型。

typeof(someUndefinedVariable);
"undefined"

由于除空字符串之外的所有字符串都是真实的,因此您可以返回真实的内容。

Javascript中只有7个假值。

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 以外的任何数字
  • 任何数组,包括空数组
  • 任何对象,包括空对象
  • 功能
  • 等。。。