if(XX) , == , ===

== 和 === :

  • 首先說明一個非常特殊的值NaN, typeof(Nav)得到'number',可是NaN不等于不論什么一個值(包含它本身)。推斷一個值是不是NaN僅僅能使用isNaN
    NaN == NaN //得到 false
    NaN === NaN //得到false
    isNaN(NaN) //得到true
  1. 然后===也比較簡單:
    • 等號兩邊類型和值都相等才返回true
    1 === 1 //得到 true
     1 === ‘1’//得到false
    
  • 對于對象、數組、函數(三者均為對象Object的instance):僅僅有等號
    兩邊引用了同一個對象。才返回true。引用不同對象。即使兩個對象值相
    等也返回false。

     ```
     var a = {test:'test'};
     var b = {test:'test'};
     var c = a;
     a === b //得到false
     a === c  //得到true
    ```
    
  • 對于undefined和null:僅僅有兩邊同一時候為undefined或者同一時候為null時全然相等
    undefined === undefined //得到true
    null === null //得到true
    undefined === null //得到false
    2.==略微復雜些:

    • 假設等號兩邊的類型和值相等則返回true
    • 假設等號兩邊類型相等。可是值不相等,則按下面規則比較:
      假設一個值是數字。還有一個值是字符串,把字符串轉換為數字。再用轉
      換后的值進行比較。
      1 == '1' //得到true
      假設一個值為true,將它轉化為1,再進行比較。
      假設一個值為false,把它轉化為0,再進行比較。
      true == 1 //得到true
      0 == false// 得到true
  • 假設等號兩邊都是對象,那么必須引用同一個對象才返回true。假設一個值是對象,還有一個值是數字或字符串。將對象轉換成原始類型的值,再進行比較。能夠使用對象的toString()方法或valueOf()方法把對象轉化成原始類型的值。
    JavaScript核心語言的內部類通常先嘗試valueOf()方法轉換,再嘗試toString()方法轉換,可是對于Date類。則先運行toString()方法再運行valueOf()方法轉換。不屬于JavaScript核心語言的對象則能夠採用JavaScript實現定義的方式把自身轉換成原始數值。
var  b = {test:'test'};
a.valueOf = function(){return 1};
b.valueOf = function(){return 1};
a == b // 返回false
1 == a //返回true
  • 對于undefined和null: 等號兩邊出現隨意一個都返回true
 undefined == undefined //得到true
 null == null //得到true
 undefined == null //得到true

if(xxx) :

if(xxx)事實上非常easy,它始終會把xxx的值轉換成Boolean(即true或者false); 0,'0',[],null,undefined,NaN轉換成Boolean類型都為false。

附:這里說一個非常實用的技巧。在變量前面加兩個!! 取反符號。能夠把變量強制轉換成Boolean類型,這樣一來,!!NaN === !!null也得到true,奇妙吧
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容