Truthy and Falsy: When All is Not Equal in Javascript (翻譯)

就像很多程式語言,JavaScript 也支援 Boolean 資料型態;值可被設為 true 或 false。此外,JavaScript 所有的物件或變數皆有一個繼承的 Boolean 值,一般稱為 truthyfalsy。在處理 truthyfalsy 值時會變得有點奇怪,尤其是在比較變數時。多了解寫有關這奇怪的規則會有助於在 debug 負責的 client-side 應用程式。

TruthyFalsy
以下值永遠是 falsy

1
2
3
4
5
6
false
0 (零)
"" (空字串)
null
undefined
NaN (一個特別的數字、稱為 Not-a-Number!)

其他的值都是 truthy,包括 ‘0’ (零在引號裡)、’false’ (false在引號裡)、空函式、空陣列、及空物件。

1
2
var a = !!(0); // 變數被設為 false
var b = !!("0"); // true

比較 falsy
falsy 值遵循一些稍微奇怪的規則、且可能導致程式邏輯錯誤。

Falsy 值為 false, 0 (零), 還有 "" (空字串)互相相等、且可互相比較

1
2
3
var c = (false == 0); // true
var d = (false == ""); // true
var e = (0 == ""); // true

Falsy 值為 nullundefined除了他們自己,其他均不相等

1
2
3
4
var f = (null == false); // false
var g = (null == null); // true
var h = (undefined == undefined); // true
var i = (undefined == null); // true

最後,Falsy 值為 NaN不等於任何變數或物件 - 包括自己(NaN)!

1
2
var j = (NaN == null); // false
var k = (NaN == NaN); // false

你也應該知道 typeof(NaN)return "number"。幸運的是,JavaScript 有內建 function isNaN() 能夠用來知道值是否為 NaN

如果還有疑惑…
===!==truthyfalsy 值會導致邏輯錯誤。這兩個運算子會比較型別及值。

1
2
var l = (false == 0); // true
var m = (false === 0); // false

truthyfalsy 已經害你對 JavaScript 感到頭痛了嗎?

原文:http://www.sitepoint.com/javascript-truthy-falsy/