为什么(0);“A:”和“0”=“真”的行为不同吗?“A:B);[重复]

在 JavaScript 中,我们经常会遇到一些看起来很奇怪的语法和行为。其中一个是 (0)"" == false 等表达式返回 true,而 ("A" == true)("0" == false) 则返回 false。这篇文章将深入探讨这些现象背后的原理,并提供一些指导意义和示例代码。

前置知识

在深入了解这些现象之前,我们需要先了解一些相关的基础知识:

  • JavaScript 类型转换:JavaScript 是一种弱类型语言,它允许我们在不显式声明变量类型的情况下对其进行操作。在运行时,JavaScript 解释器会根据需要自动进行类型转换。例如,当我们使用 == 进行比较时,如果两个操作数的类型不同,JavaScript 会尝试将它们转换为相同的类型再进行比较。
  • Falsy 值:在 JavaScript 中,有一些特定的值被认为是 falsy。它们包括 false0""(空字符串)、nullundefinedNaN。在条件语句中,这些值被视为 false,并且不执行相应的代码块。
  • Truthy 值:与 falsy 相反,Truthy 值是在条件语句中被视为 true 的值。它们包括除 falsy 值之外的所有值。

为什么(0)会被认为是 true?

当我们使用 (0) 进行比较时,JavaScript 会将其转换为布尔值。由于 0 是 falsy 值,而括号可以将其转换为一个表达式,所以 (0) 被认为是一个 truthy 值。

-- --- -
  ------------------------
-

-- ----- -
  -----------------------
-

上面的代码中,第一个 if 语句不会执行,因为 0 是 falsy 值。而第二个 if 语句会执行,因为 (0) 被认为是一个 truthy 值。

“A:”和“0”=“真”的行为不同吗?

这里的问题涉及到两种情况:

  • 当我们使用 == 比较字符串和布尔值时,会发生什么?
  • 当我们使用 == 比较字符串和数字时,会发生什么?

"A:" 和 "0" = "真"

首先,让我们看看第一种情况。当我们使用 == 比较字符串和布尔值时,JavaScript 会尝试将它们转换为相同的类型再进行比较。在这种情况下,字符串会被转换为布尔值,而 "A:""0" 都被认为是 truthy 值。因此,"A:" == true"0" == true 都返回 false

-- ------ -
  -----------------------
-

-- ----- -
  ------------------------
-

上面的代码中,两个 if 语句都会执行,因为 "A:""0" 都被认为是 truthy 值。

"A:B" 和 0 = "真"

现在让我们看看第二种情况。当我们使用 == 比较字符串和数字时,JavaScript 会尝试将它们转换为相同的类型再进行比较。在这种情

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/10405