js中比較2個變量一般使用的是==和===,==比較2個變量的時候若是變量類型不一樣會嘗試一些類型轉換,而後進行比較,例如數組
let q1="10";
let q2=10;
console.log(q1==q2); //true
複製代碼
而===會先比較2個變量的類型若是2個變量的類型不一樣就會直接拋出false,例如bash
let q1="10";
let q2=10;
console.log(q1===q2); //false
複製代碼
let q1=10;
let q2=10;
console.log(q1===q2); //true
複製代碼
那麼使用==和===比較2個對象會出現什麼結果呢咱們來看一下:ui
let q1={
a:1,
b:10
};
let q2={
a:1,
b:10
};
console.log(q1===q2);//false
console.log(q1==q2);//false
let a1=[1,10];
let a2=[1,10];
console.log(a1===a2);//false
console.log(a1==a2);//false
let d1=new Date();
let d2=new Date();
console.log(d1===d2);//false
console.log(d1==d2);//false
複製代碼
結果能夠看出都拋出了false,那是由於==和===在比較日期、對象和數組的時候比較的是指針所指的內存地址是否相同,以對象爲例咱們來看一下:spa
let q1={
a:1,
b:10
};
let q2={
a:1,
b:10
};
let q3=q1;
console.log(q1==q2);//false
console.log(q1==q3);//true
console.log(q2==q3);//false
複製代碼
當咱們將q1的內存地址賦值給q3的時候q1和q3就指向了同一個內存,因此這個時候判斷就會拋出true. 那麼若是咱們想要判斷日期、對象和數組是否相等怎麼辦,咱們能夠作一些轉換指針
let q1={
a:1,
b:10
};
let q2={
a:1,
b:10
};
console.log(JSON.stringify(q1)==JSON.stringify(q2));//true JSON.stringify將對象轉化爲string類型JSON.stringify(q1)==>"{a:1,b:10}"
let a1=[1,10];
let a2=[1,10];
console.log(a1.toString()==a2.toString());//true a1.toString()==>"1,10"
let d1=new Date();
let d2=new Date();
console.log(d1.getTime()==d2.getTime());//true new Date("2019-2-25").getTime()==>1551024000000 將Date轉化爲時間戳進行判斷
複製代碼