js对象数组Date的比较

579

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转化为时间戳进行判断