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

为什么“ true” == true在JavaScript中显示为false?

许亦
2023-03-14
问题内容

MDC对==操作员的描述如下:

如果两个操作数的类型不同,则JavaScript会转换操作数,然后进行严格比较。如果操作数是数字或布尔值,则在可能的情况下将操作数转换为数字;否则,操作数将转换为数字。否则,如果其中一个操作数是字符串,则另一个操作数将尽可能转换为字符串。

考虑到这一点,我将评估"true" == true如下:

  1. 它们是同一类型吗? 没有
  2. 操作数是数字还是布尔值?
  3. 我们可以将它们都转换为数字吗? isNaN(Number("true")) // true
  4. 任一操作数都是字符串吗?
  5. 我们可以将另一个操作数转换为字符串吗? String(true) === "true" // true

我最终得到了字符串"true""true",其结果应为true,但是JavaScript显示为false。

我错过了什么?


问题答案:

因为"true"转换为NaN,而true则转换为1。所以他们不同。

就像您报告的那样,两者都被转换为数字,因为至少true可以被转换(请参阅Erik Reppen的评论),然后进行比较。



 类似资料:
  • 问题内容: 我的交互式控制台的简要记录: 到底为什么呢? 编辑: 为了对比起见,请考虑运算符。 这使得有很大的意义,因为虽然和都意味着同样的事,作为一个条件语句,他们真的是不一样的东西。 再次编辑: 更有趣的后果: 问题答案: 因为Python中的Boolean是整数的子类型。从文档中: 布尔值是两个常量对象False和True。它们用于表示真值(尽管其他值也可以视为假或真)。在数字上下文中(例如

  • 问题内容: 如果我这样做: 那又回来了。仅仅是因为在列表中。 但是,如果我这样做: 那又回来了。而等于: 为什么? 问题答案: 运算符优先级 2.x,3.x。的优先级低于的优先级。因此,它等效于: 这就是你想要的: 正如@Ben指出的那样:建议从不写作,更喜欢。前者使它看起来像一个函数调用,而它却是一个运算符,而不是一个函数。

  • 在我的clang和libc版本中(靠近),这个传递: 当然,如果你真的试图复制构造一个唯一指针的向量,它无法编译: 我假设这种情况是因为

  • 我很熟悉在JavaScript中是“怪异的”,即总是返回,如本文所述。因此,不应进行比较来检查,而应使用isNaN(..)取而代之的是。 所以我惊讶地发现 这似乎不一致。为什么会有这种行为? 它是怎么工作的?方法是否专门检查?

  • 问题内容: 题 对于扫描仪对象,该方法返回true,而该方法返回false的结果又如何呢? 注意:根据输入文件,该方法将按预期返回结果。在似乎没有被返回正确的结果。 码 这是我正在运行的创建以下结果的代码: 输入文件 以下是我传递给此扫描仪的文件的实际内容: 结果 以下是我运行代码时控制台中显示的内容的结尾,其中包括我无法理解的部分: 问题答案: 文件末尾有一个额外的换行符。 检查缓冲区中是否还有

  • 问题内容: 在Python控制台中: 给我: 为什么?有人可以用二进制给我解释这个特殊情况吗? 问题答案: 是。 是: 并且是: 这是在两个补1 1翻转所有位,将1加到结果数上,并将结果解释为幅度的 二进制表示形式 ,并添加一个负号(因为数字以1开头): 它是2,但是由于MSB是1 ,所以符号是负数。 值得一提: 想一想,您会发现它本质上是数字-它有两个值和,它们只是整数1和0的“自定义”版本,它