JavaScript 語言中有兩種比較方式,轉換類型比較運算符 ==
和嚴格比較運算符 ===
。其中嚴格比較運算符僅當兩個操做數的類型相同且值相等時才爲true。而轉換類型比較運算符==
會在進行比較以前,將兩個操做數轉換成相同的類型,再來比較。code
比較運算符經常使用語邏輯語句中,它主要是用語斷定變量或者值是否相等。對象
相等運算符 ==
會爲兩個不一樣類型的操做數轉換類型,而後進行嚴格比較。ip
console.log(1 == 1); // true console.log(1 == 2); // false console.log(1 == true); // true console.log(1 == '1'); // true
從上述代碼中的1 == '1'
,輸出結果爲 true
,就能夠看出 ==
相等運算符,在對兩個操做數進行比較以前,會將兩個操做數轉換成相同的類型。內存
當使用比較運算符時,若是其中有布爾類型的操做數,值爲 true時會轉換爲1,值爲false時會轉換爲0。字符串
當兩個操做數都是對象時,JavaScript會比較其內部引用,當且僅當他們的引用指向內存中的相同對象時才相等,即他們在棧內存中的引用地址相同。console
嚴格相等運算符 ===
不會對操做數進行類型轉換,只有當值相等而且類型也是相等時纔會返回 true
。class
console.log(1 === 1); // true console.log(1 === 2); // false console.log(1 === true); // false console.log(1 === false); // false console.log(1 === '1'); // false
從a === c
d的比較結果能夠看出,不一樣類型的值進行比較時,會返回 false。變量
不等運算符 !=
只有當操做數不相等時才返回true
,若是兩操做數不是同一類型,會將操做數轉爲贊成類型再進行比較。引用
var a = 1; var b = 2; var c = '1'; console.log(a != 1); // false console.log(a != b); // true console.log(a != c); // false
若是兩操做數爲對象類型,JavaScript會比較其內部引用地址,僅當他們在內存中引用不一樣對象時不相等。方法
嚴格不等運算符 !==
當操做數不相等或不一樣類型時返回 true。
var a = 1; var b = 2; var c = '1'; console.log(a !== 1); // false console.log(a !== b); // true console.log(a !== c); // true
大於運算符 >
,只有當左操做數大於右操做數時才返回 true
。
console.log(5 > 1); // true console.log(5 > 10); // false console.log(5 > '5'); // false
大於等於運算符 >=
,只有當左操做數大於或者等於右操做數時才返回 true
。
console.log(5 >= 1); // true console.log(5 >= 5); // true console.log(5 >= 10); // false console.log(5 >= '5'); // true
小於運算符 <
,只有當左操做數小於右操做數時才返回 true
。
console.log(5 < 1); // false console.log(5 < 5); // false console.log(5 < 10); // true console.log(5 < '5'); // false
小於運算符 <
,只有當左操做數小於或者等於右操做數時才返回 true
。
console.log(5 <= 1); // false console.log(5 <= 5); // true console.log(5 <= 10); // true console.log(5 <= '5'); // true
當比較運算涉及類型轉換時,JavaScript 會按如下規則對字符串、數字、布爾、對象等類型的操做數進行操做:
valueOf
和 toString
方法將對象轉換爲其原始值。若是嘗試轉換失敗,會產生一個運行時錯誤。console.log(1 <= 3); console.log(true != 5); console.log('1' >= false); console.log(2 === '5'); console.log(5 == '5');