在javascript中,我们经常会遇到非假值的情况,那么什么是非假值呢?
非假值是指在javascript中判断为真的值,这些值不一定是true或者1,而是一些看似不那么显然的数据类型,比如:
if ("0") { ... } // 真if ([]) { ... } // 真if ({}) { ... } // 真if ("false") { ... } // 真
字符串 "0" 被理解为 true,因为它是一个非空字符串,为空的字符串将被理解为假值。数组 [] 被理解为 true,因为它不是 null 或 undefined。同样,对象 {} 被处理为 true。另外,字符串 "false" 其实代表了一个真实的字符串,虽然它的值看起来是一个布尔值。
下面是一些其他情况:
if (NaN) { ... } // 假if (null) { ... } // 假if (undefined) { ... } // 假if (0) { ... } // 假if (false) { ... } // 假if ("") { ... } // 假
需要注意的是,布尔值true和非假值在大多数情况下是一样的,但并不是完全相同。例如:
if (true == "1") { ... } // 真if (true === "1") { ... } // 假
在这个例子中,我们可以看到"1"被转换为数字1,然后被理解成true。但是,使用全等(===)运算符进行比较则会返回 false,因为这些值的数据类型不同。
最后要提醒的是,在使用非假值时,一定要小心陷阱!比如:
if ("0" == false) { ... } // 真if ("0" === false) { ... } // 假
在这个例子中,使用双等号(==)进行比较时,"0"被转换为数字0,然后被理解成false。使用全等(===)运算符,则返回false。因此,我们应该始终使用全等运算符,以避免这些陷阱。