包括==与===运算符,前者为宽松判断相等,如果两者类型不同前面的比较值将进行类型转换,后者为完全相等判定。
1、数字、字符串和布尔值通过值比较
==与===检测前后两者是否相同,只当它们存放的值完全相同时才相等。
var a = ‘a‘;
var b = ‘a‘;
console.log(a==b,a===b);true true
var a = String(‘a‘);
var b = String(‘a‘);
console.log(a==b,a===b);true true
js中的数字都为浮点数,不存在整型转为浮点型的问题
var a = 1;
var b = 1.0;
console.log(a==b,a===b);true true
var a = 1;
var b = true;
console.log(a==b,a===b); // ==前面的a进行类型转换,转为布尔值true false
2、对象、数组和函数之间使用引用比较。
数组和函数是对象的特殊形式。
如果对象的存放地址不同,如何都不相等。
var a = [2,3];
var b = [2,3];
console.log(a==b,a===b);false false
var a = [2,3];
var b = a;
console.log(a==b,a===b);true true
3、特殊的NaN
NaN与任何数值、对象比较都不相等,包括它自身。
var a = 2;
var b = 0/0;
console.log(b,a==b,a===b,b==NaN);NaN false false false
4、null与undefined的比较
这两个基本类型的比较与数字、字符串的比较是一样的。
var a = null;
var b = undefined;
var d;
console.log(d,a==b,a===b,b===d,d===undefined);undefined true false true true
5、对象与字符串比较
js内部会将对象转换成原始类型的值进行比较,通常先尝试valueOf方法,再尝试toString转换。
var a = ‘[object Object]‘;
var b = {};
console.log(a==b,b.toString());true [object Object]
唯一例外的是js中的核心对象Date,它直接使用toString()方法转换。
var a = new Date(2016,04,15);
var b = 1463241600000;
var c = ‘Sun May 15 2016 00:00:00 GMT+0800‘;
console.log(a==b,a==c,a.valueOf(),a.toString());false true 1463241600000 Sun May 15 2016 00:00:00 GMT+0800