TOC

This article is currently in the process of being translated into Chinese (~81% done).

The Basics:

Truthy & Falsy

在大多数编程语言中,乃至在数学中,“真(true)”和“假(false)”是完全二元的:某些事物要么是”真“的,要么是”假“的。但在JavaScript中,“真”和“假”的概念被扩展了一些,因为这门语言总体而言是相当宽松的且不像其他编程语言那么严谨。

在实际操作中,这表示有时JavaScript会将某些事物评价为“真”的或“假”的其中之一,尽管事实上它并不是完全“真”或“假”。这样做的目的仅仅是是为了能让事物变得更加简单和易处理的,但如果你不知道情况,或者时间太长忘记了,那这件事物可能会让你感到一些困惑。

因此,让我来为你介绍一个新的概念:真值和假值。它们仅仅作为一个概念存在,你既无法在JavaScript中找到一个属于它们的关键字,也无法找到一个与真值和假值相匹配的值。相反,JavaScript提出了一组运算符用于检测某件事物是否完全“真”的或“假”的,这些被称为严格运算符。例如严格相等运算符,当比较两个值时,需要使用三个等号而不是两个。

我们将在后续章节中讨论更多JavaScript的各种运算符,包括严格运算符。但目前我们先来讨论关于哪些是可以被认为是真值或假值的。

真值

在JavaScript中,除非被特别指定为假值,否则所有的值都是真值。当在某些语境中有需要时,JavaScript会使用强制类型转换将所使用的某些值转换为布尔值,比如一个循环或者一个if结构。举个例子,考虑在以下例子中的值,由于它们是真值,它们会被当做“真”来处理。

if(true)
	alert("truthy");
if(42)
	alert("truthy");
if("hello world")
	alert("truthy");	

如果你运行了这个例子,你会看到这三个if结构都得到了“真”,但为什么"hello world"是”真“?因为它包含了一个实际的值,然后JavaScript会在要求”真“或”假“的上下文中认为这是真值。

假值

一般而言,null、undefined或空值会被认为是假值,且当在一个布尔上下文中被使用时会被当成“假”对待,这里有几个例子:

if(false)
	alert("falsy");
if(null)
	alert("falsy");
if(0)
	alert("falsy");	
if("")
	alert("falsy");	

如果你运行了这个例子,你会注意到它们当中没有一个被触发,在这个语境中,以上所有的if结构都被认为是“假”的。

总结

当JavaScript需要某些事物是“真”的或“假”的时,如当评价一个循环或者if结构的条件时,它会采用强制类型转换,如果有需要的话,会将不是真正的布尔值的值转换为“真”或“假”。这种结果被称为真值和假值,因为当它们不是真正的“真”或“假”时,它们对于JavaScript来说足够接近去基于它们作出决定,如同这篇文章中的例子所证明的。


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!