包括==与===运算符,前者为宽松判断相等,若是二者类型不一样前面的比较值将进行类型转换,后者为彻底相等断定。数组
一、数字、字符串和布尔值经过值比较函数
==与===检测先后二者是否相同,只当它们存放的值彻底相同时才相等。对象
var a = 'a';
var b = 'a';
console.log(a==b,a===b);字符串true trueconsole
var a = String('a');
var b = String('a');
console.log(a==b,a===b);objecttrue true引用
js中的数字都为浮点数,不存在整型转为浮点型的问题方法
var a = 1;
var b = 1.0;
console.log(a==b,a===b);类型转换true trueco
var a = 1;
var b = true;
console.log(a==b,a===b); // ==前面的a进行类型转换,转为布尔值true false
二、对象、数组和函数之间使用引用比较。
数组和函数是对象的特殊形式。
若是对象的存放地址不一样,如何都不相等。
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
三、特殊的NaN
NaN与任何数值、对象比较都不相等,包括它自身。
var a = 2;
var b = 0/0;
console.log(b,a==b,a===b,b==NaN);NaN false false false
四、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
五、对象与字符串比较
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