为什么 if("string") 会被判断为 true,但 if ("string"==true) 不是?

在 JavaScript 中,if 语句可以根据条件的真假来执行不同的代码块。当条件的值为 true 时,相应的代码块将被执行。以下是一个简单的例子:

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

在这个例子中,1>0 的结果是 true,因此后面的代码块将被执行。

现在让我们看看一个更复杂的例子:

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

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

在这个例子中,第一个 if 语句中的条件是一个非空字符串 "string"。即使没有比较运算符,它也会被视为 true,并且代码块将被执行。相比之下,第二个 if 语句中的条件是一个空字符串 "",因此代码块将不会被执行。

那么问题来了,为什么 "string" 被视为 true,而 "" 被视为 false 呢?答案是 JavaScript 中有一个称为“truthy”和“falsy”的概念。Truthy 表示一个值被视为 true,而 falsy 表示一个值被视为 false。

以下是一些常见的 truthy 和 falsy 值:

  • Truthy: true, any non-zero number, any non-empty string, any object, function
  • Falsy: false, 0, "", null, undefined

因此,"string" 是一个非空字符串,它被视为 truthy,而 "" 是一个空字符串,它被视为 falsy。

现在让我们再来看一下第二个例子中的条件:

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

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

在这两个 if 语句中,条件都是一个比较运算符,将 "string" 与 true 或 false 进行比较。但是,JavaScript 中有一个称为类型转换的概念,它会自动将不同类型的值转换为相同的类型进行比较。在这种情况下,"string" 被转换为布尔值,即 true,然后与 true 进行比较。由于 "string" 等于 true(它们都被视为 truthy),所以条件为 true。

但是,在第一个 if 语句中,条件是非比较运算符,因此不会发生类型转换。相反,它只是检查 "string" 是否为 truthy 值,这显然是正确的。

为了避免这种问题,我们应该始终使用全等运算符 === 来比较值。全等运算符会检查值的类型和值是否相同,因此不会发生类型转换。

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

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

以上就是本文对于 JavaScript 中 if 语句条件判断的解释。我们应该注意 truthy 和 falsy 的概念,并使用全等运算符来比较值,以避免类型转换带来的问题。

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