Truthy和Falsy:js變量中隱含的的boolean屬性

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

原文作者:Craig Buckler 

一、前言

首先,我是一個小白,一個相信有一天我也能成爲高手的小白。好了,這就夠了,那麼,開始吧。

以前在用javascript的時候偶爾也聽過 ''(空串),0會返回false之類的,也確實用過來判斷,最近看到一篇文章,有一個系統的介紹。才明白了,原來專業一點這叫做truthy和falsy原則呀,看見單詞挺簡單的,網上的大神們都不屑翻譯,那麼,就讓我這個小白來練練手吧~

首先要說的是這個truthy以及falsy該如何翻譯,google了下沒有這單詞。其實想了想也不必翻譯,按照中文的感性理解,不就是“對的”,“能返回否的東西”嘛!

------------------------------------------------以下是譯文全文-----------------------------------

像很多語言一樣,javascript也支持boolean數據類型(有true和false兩個值),不過特別的是,javascript中的任何對象都還隱含一個boolean值,這便是大家所說的truthy和falsy原則。我們可以很方便的使用這個隱含的屬性,特別是在變量比較上(//if條件句)。掌握好這些特別的規則有助於調試我們的前端代碼。

truthy和falsy值

以下的值都隱含有false屬性:

  • false
  • 0 (零)
  • "" (空串)
  • null
  • undefined
  • NaN (Not-a-Number,注意,這是個number類型!用來表示變量不是number的number類型,有些拗口)
除此之外的其他值隱含的均是true屬性,像“0”(字符串)、“false”(字符串),還有空函數、空數組、空對象這些比較容易搞混的,都是能返回true。正常的變量像“abc”,1234之類的當然不必說啦,通通true。
舉個例子吧:
var a = !!(0); // a的值爲false
var b = !!("0"); // b的值爲true
關於falsy值之間的比較,分爲以下幾種情況
1.false、0、空串三者是可以互等的,如下所示:
var c = (false == 0); // true
var d = (false == ""); // true
var e = (0 == ""); // true
2.null和undefined可以互等,但是不與其他幾種相等,如下:
var f = (null == false); // false
var g = (null == null); // true
var h = (undefined == undefined); // true
var i = (undefined == null); // true
3.最後一個比較特別的,NaN,不與其他任何的相等,甚至與自己都不等(//六親不認,失去自我)

var j = (NaN == null); // falsevar k = (NaN == NaN); // false

再補充一個小知識:javascript使用typeof(NaN),返回值是number,也就是說這個NaN還是個number類型。還好js提供了一個函數inNaN()用來判斷一個變量是否是數字。

如果你使用的時候有疑惑。。。

用強等於吧,如下:

var l = (false == 0); // true
var m = (false === 0); // false
另外一個比較特別的地方

空數組,例如var a = [];是返回true的,但也得看你怎麼用,區別如下:

if ( [] ) {
  // 這裏的代碼將會執行
}

if ( [] == true ) {
  // 這裏的代碼不會執行
}

if ( [] == false ) {
  // 這裏的代碼將會執行
}

也就是說,truthy和true還是不一樣的,隱含有true屬性的變量不可以認爲它是true,它不是boolean類型!


------------------------------------------譯文結束----------------------------

回頭看一眼,這點小屁文章,根本就不用翻譯,好吧。。。請噴吧。。。反正我還是小白






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章