包括==與===運算符,前者爲寬鬆判斷相等,若是二者類型不一樣前面的比較值將進行類型轉換,後者爲徹底相等斷定。數組
一、數字、字符串和布爾值經過值比較函數
==與===檢測先後二者是否相同,只當它們存放的值徹底相同時才相等。對象
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