js物件,陣列,Date的比較
js中比較2個變數通常使用的是==和===,==比較2個變數的時候如果變數型別不同會嘗試一些型別轉換,然後進行比較,例如
let q1="10";
let q2=10;
console.log(q1==q2); //true
複製程式碼
而===會先比較2個變數的型別如果2個變數的型別不同就會直接丟擲false,例如
let q1="10";
let q2=10;
console.log(q1===q2); //false
複製程式碼
let q1=10;
let q2=10;
console.log(q1===q2); //true
複製程式碼
那麼使用==和===比較2個物件會出現什麼結果呢我們來看一下:
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,那是因為==和===在比較日期、物件和陣列的時候比較的是指標所指的記憶體地址是否相同,以物件為例我們來看一下:
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轉化為時間戳進行判斷
複製程式碼