当前位置: 首页 > 面试题库 >

为什么!new Boolean(false)在JavaScript中等于false?

郤坚诚
2023-03-14
问题内容

来自javascript类型的jQuery文档中的这段代码片段描述了转换为布尔值时字符串的行为(该主题与该问题无关,但这只是我找到代码的地方):

!"" // true
!"hello" // false
!"true" // false
!new Boolean(false) // false

我得到了前三个示例,但没有得到最后一个示例,因为:

new Boolean(false) == false //true
!false // true

所以我假设:

!new Boolean(false) // true

但反而:

!new Boolean(false) // false, mind = blown

我什至不知道这是什么…

是因为:

new Boolean(false) === false // false

如果是这样,这有什么目的?


问题答案:

new Boolean(false)返回一个不为null 的 对象 。非空对象始终是真实的。

结果,!任何非null对象将始终为false。

为了向自己证明,您可以在JavaScript控制台中运行它

(typeof new Boolean(false))  //"object"

另外,您可以使用strict equality运算符来确认new Boolean(false)不是false

new Boolean(false) === false  // false

顺便说一句,在Boolean没有新函数的情况下将函数作为函数调用实际上确实会返回原始

!Boolean(false) // true

(typeof Boolean(false))  //"boolean"


 类似资料:
  • 问题内容: 在Python中(我仅使用Python 3.6进行过检查,但我相信它也适用于许多以前的版本): 但: 为什么两种方法的结果不同?相等运算符对元组的处理方式是否不同? 问题答案: 前两个表达式都解析为元组: (即),然后是 ,其次是(仍然如此)。 由于逗号分隔符相对于相等运算符具有较高的优先级,因此将表达式进行拆分:Python看到一个元组包含两个表达式,其中一个恰好是一个相等测试,而不

  • 问题内容: 我正在阅读本文: 在SQL中获取null == null 共识是,当尝试测试两个(可空)sql列之间的相等性时,正确的方法是: 当A和B为时,(A = B)仍返回FALSE,因为NULL不等于NULL。这就是为什么需要额外检查的原因。 检验不平等情况如何?经过以上讨论,我认为要测试不平等,我需要做一些类似的事情: 但是,我注意到这不是必需的(至少在informix 11.5上没有),我

  • 问题内容: MDC对操作员的描述如下: 如果两个操作数的类型不同,则JavaScript会转换操作数,然后进行严格比较。如果操作数是数字或布尔值,则在可能的情况下将操作数转换为数字;否则,操作数将转换为数字。否则,如果其中一个操作数是字符串,则另一个操作数将尽可能转换为字符串。 考虑到这一点,我将评估如下: 它们是同一类型吗? 没有 操作数是数字还是布尔值? 是 我们可以将它们都转换为数字吗? 否

  • 问题内容: 下面显示了Javascript中的false: 那么,为什么要打印以下内容? 问题答案: 原因是因为当您显式这样做时,双方都将转换为数字, 然后 执行比较。 当您执行以下操作:时,正在测试字符串值。任何非空字符串为,而空字符串为。 等于(==)如果两个操作数 的类型不同 ,则JavaScript会转换操作数,然后进行严格比较。如果操作数是 数字或布尔值,则如果可能,将操作数转换为数字;

  • 问题内容: 使用括号时,这些语句为什么能按预期工作: 但是 ,如果没有括号,它会返回吗? 问题答案: 基于有关操作符优先级的python 文档 : 请注意,比较,成员资格测试和身份测试均具有相同的优先级,并且具有“比较”部分中所述的从左到右的 链接 功能。 因此,实际上您有一个链接语句,如下所示: 您可以假定中心对象将在2个操作和其他对象之间共享(在这种情况下为False)。 并且请注意,对于所有

  • 问题内容: 在JavaScript中,为什么要评估为,但要评估为? 我在一个文本输入字段进行数字运算,和我正在检查该字段为,或。当有人在该字段中输入几个空格时,我的验证在这三个字段上均失败,并且我对为什么它无法通过检查感到困惑。 问题答案: JavaScript将一个空字符串解释为0,然后失败了isNAN测试。您可以先在字符串上使用parseInt,它不会将空字符串转换为0。然后结果应为isNAN