在尝试解决编码难题时,我试图做出一些条件语句。我一直跟踪两个字符串在不同对象中出现的所有字母。如果在另一个对象中未定义计数时,当我尝试通过它们的计数比较它们时,即使第一个值是真实值,它也会评估为false。
但是;
1 > Boolean(undefined)
计算为true。但是1> undefined的值为false。行为是否如此是有原因的吗?
答案 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 > 0
是true
。
要了解的东西:
JavaScript是"loosely" or "weakly" typed language。这意味着数据可以并且经常被隐式转换(强制)为其他类型类别。
所有数据都可以分类为"truthy"或"falsy",这意味着如果转换为布尔值,它将转换为true
或false
。诸如null
,undefined
,""
,0
,false
和NaN
之类的都是“虚假的”。 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。