close
文章出處

上一篇文章提到了javascript中可變值與不可變值,如果你不知道什么是可變值和不可變值,可以先去看看那篇文章,再回來看這篇,因為這篇文章是基于可變值與不可變值講解的。

 

那我就默認你知道什么是可變值與不可變值。

 

1.對于不可變值來說(也就是數字,字符串,布爾,null,undefined),它們是比較值是否相等,如果值是相等的那么它們就是相等的。

2.但對于可變值來說(對象,數組),它們顯然比較值不太合適,因為它們的值是可以改變的,所以javascript為了避免這種情況的發生,把它們的比較規則修改成比較引用是否相同也就是說看它們是否是同一個東西創建出來的,如果是那么它們就相等。

 

 1 var a = [];
 2 var b = a;
 3 a[0]=2;
 4 console.log(a); >>[2]
 5 console.log(b); >>[2]  同時也把b的值也修改了,因為數組是可變的類型(也就是我們常說的引用類型)。
 6 console.log(a==b); >>true
 7 console.log(a===b); >>true
 
、、、、、、、、、、、、、、、、、、、、、、、、
1 var a = "11"; 2 var b = a; 3 a = "22"; 4 console.log(a); >>"22" 5 console.log(b); >>"11" 6 console.log(a==b); >>false 7 console.log(a===b); >>false

 

 上面我們只是說了相同類型的值的比較,那么如果是對象與原始值那么它們是怎么樣比較的呢?相當于上面的那些它們的比較要復雜一些,如果按照轉換的次數來分的話,相同類型的數據比較只需要轉換一次,而不同類型的比較則需要轉換兩次,當然不同類型的轉換可能不只是兩次,我只是說的大多數情況。

 

 

 1 var a = 1;
 2 var b = [1];
 3 console.log(a==b); >>true

 1 var a = "1";
 2 var b = [1];
 3 console.log(a==b); >>true
  
 1 var a = 1;
 2 var b = [1];
 3 var c = b.toString();
 4 console.log(typeof b); >>object
 5 console.log(typeof c); >>string
 6 console.log(a==c);    >>true
這里數組進行了隱式轉換,調用了toString();為什么調用toString()因為數組也是對象,對象是調用這個進行轉換成原始值的,如果不是對象那就是調用普通的String、Number方法;

轉換過程如下:
  1.首先將調用toString轉換b,轉換后的b="1";
  2.現在b是一個普通的字符串也就是原始值,那么現在就可以調用Nubmer來轉換了,最后就成了數字1;
  

 更多關于toString方法的詳細說明看對象、數組轉換字符串的方法

 


不含病毒。www.avast.com
arrow
arrow
    全站熱搜

    AutoPoster 發表在 痞客邦 留言(0) 人氣()