为什么`1> undefined`评估为false?

时间:2018-10-20 18:39:08

标签: javascript

在尝试解决编码难题时,我试图做出一些条件语句。我一直跟踪两个字符串在不同对象中出现的所有字母。如果在另一个对象中未定义计数时,当我尝试通过它们的计数比较它们时,即使第一个值是真实值,它也会评估为false。

但是;

1 > Boolean(undefined)计算为true。但是1> undefined的值为false。行为是否如此是有原因的吗?

2 个答案:

答案 0 :(得分:2)

为了使用比较运算符>,两个操作数都必须是数字。 1已经存在,因此Boolean(undefined)(顺便算为false)必须转换为数字。在这种情况下,您将得到0

// First, convert undefined to a Boolean
let bool = Boolean(undefined)
console.log(bool);

// Then convert that to a number
let num = Number(bool);
console.log(num);

因此,1 > 0true

要了解的东西:

JavaScript是"loosely" or "weakly" typed language。这意味着数据可以并且经常被隐式转换(强制)为其他类型类别。

所有数据都可以分类为"truthy""falsy",这意味着如果转换为布尔值,它将转换为truefalse。诸如nullundefined""0falseNaN之类的都是“虚假的”。 JavaScript(以及大多数其他语言)中的false会转换为数字0,而true通常会转换为1

答案 1 :(得分:2)

当您将通常不具有可比性的东西进行比较时,JavaScript进行了大量时髦的转换。

1>undefined将undefined强制转换为NaN,并且您无法将数字与非数字进行比较,因此任何比较都将返回错误的><==等等

当您将1>Boolean(undefined)的undefined强制转换为布尔值equivalent为false时,然后将其比较为强制转换为0,则可以通过执行Number(Boolean(undefined))来确认,因为1大于0则返回true。

相关问题