== 和 === :
- 首先說明一個非常特殊的值NaN, typeof(Nav)得到'number',可是NaN不等于不論什么一個值(包含它本身)。推斷一個值是不是NaN僅僅能使用isNaN
NaN == NaN //得到 false
NaN === NaN //得到false
isNaN(NaN) //得到true
- 然后===也比較簡單:
- 等號兩邊類型和值都相等才返回true
1 === 1 //得到 true 1 === ‘1’//得到false
-
對于對象、數組、函數(三者均為對象Object的instance):僅僅有等號
兩邊引用了同一個對象。才返回true。引用不同對象。即使兩個對象值相
等也返回false。``` var a = {test:'test'}; var b = {test:'test'}; var c = a; a === b //得到false a === c //得到true ```
-
對于undefined和null:僅僅有兩邊同一時候為undefined或者同一時候為null時全然相等
undefined === undefined //得到true
null === null //得到true
undefined === null //得到false
2.==略微復雜些:- 假設等號兩邊的類型和值相等則返回true
- 假設等號兩邊類型相等。可是值不相等,則按下面規則比較:
假設一個值是數字。還有一個值是字符串,把字符串轉換為數字。再用轉
換后的值進行比較。
1 == '1' //得到true
假設一個值為true,將它轉化為1,再進行比較。
假設一個值為false,把它轉化為0,再進行比較。
true == 1 //得到true
0 == false// 得到true
- 假設等號兩邊都是對象,那么必須引用同一個對象才返回true。假設一個值是對象,還有一個值是數字或字符串。將對象轉換成原始類型的值,再進行比較。能夠使用對象的toString()方法或valueOf()方法把對象轉化成原始類型的值。
JavaScript核心語言的內部類通常先嘗試valueOf()方法轉換,再嘗試toString()方法轉換,可是對于Date類。則先運行toString()方法再運行valueOf()方法轉換。不屬于JavaScript核心語言的對象則能夠採用JavaScript實現定義的方式把自身轉換成原始數值。
var b = {test:'test'};
a.valueOf = function(){return 1};
b.valueOf = function(){return 1};
a == b // 返回false
1 == a //返回true
- 對于undefined和null: 等號兩邊出現隨意一個都返回true
undefined == undefined //得到true
null == null //得到true
undefined == null //得到true
if(xxx) :
if(xxx)事實上非常easy,它始終會把xxx的值轉換成Boolean(即true或者false); 0,'0',[],null,undefined,NaN轉換成Boolean類型都為false。