詳解JavaScript運算符中==和===的區(qū)別
前言
簡單的來講:
== 代表的是相等
=== 代表的是嚴格相等
==運算符
==,兩邊值類型不同的時候,要先進行類型轉(zhuǎn)換,再比較
如果兩個都是數(shù)值||字符串||布爾值,直接進行比較
console.log(1 == 1); // true console.log(1 == 2); // false console.log('a' == 'a'); // true console.log('a' == 'b'); // false console.log(true == true); // true console.log(true == false); // false
如果一個是String類型,另一個是Number類型,會把String類型轉(zhuǎn)換成Number類型再進行比較
console.log(1 == '1'); // true console.log(1 == 'true'); // false
如果有一個操作符是布爾值,在比較時就會轉(zhuǎn)換成Number類型再比較
console.log(0 == false); // true
如果有一個是對象,另一個不是,則會調(diào)用對象的 valueOf() 和 toString() 把對象進行一個轉(zhuǎn)換
console.log([] == false); // true console.log([] == 0); // true
只有 null 遇到 undefined 進行比較是 true,其他組合都是不相等的
console.log(null == undefined); // true console.log(null == 0); // false console.log(null == false); // false console.log(undefined == 0); // false
===運算符
==,不做類型轉(zhuǎn)換,類型不同的一定不等。
- 先判斷數(shù)據(jù)的類型是否相等,如果類型都不同,直接就返回 false
- 如果數(shù)據(jù)類型相等,就會開始判斷值是否相等
- 如果兩個都是 Object,那么會判斷它們的引用地址是否一致
console.log(1 === '1'); // false console.log(0 === false); // false console.log(null === undefined); // false let a = {}; let b = {}; let c = a; console.log(a === b); // false console.log(a === c); // true
練習
console.log("==========================") let obj = { a: 10, b: 'hello' }; let obj1 = { a: 10, b: 'hello' }; console.log(obj); console.log("對象之間比較,== 與 === 結(jié)果相同"); console.log("obj == obj1結(jié)果:" + (obj == obj1)); // false 相同類型,== 與 === 無區(qū)別,比較引用 console.log("obj === obj1結(jié)果:" + (obj === obj1));// false 相同類型,== 與 === 無區(qū)別,比較引用 console.log("==========================") console.log("String與Number之間比較") let num = 10; let num1 = 10; let str = "10"; let str1 = "String"; console.log("String == Number結(jié)果:" + (num == str)); // true 轉(zhuǎn)為Number值相同 console.log("String === Number結(jié)果:" + (num === str));// false 類型不同 console.log("同類型值相同 == 結(jié)果:" + (num == num1)); // true 類型相同,值相同 console.log("同類型值相同 === 結(jié)果:" + (num === num1));// true 類型相同,值相同 console.log("同類型值不同 == 結(jié)果:" + (str == str1)); // false 類型相同, 值不同 console.log("同類型值不同 === 結(jié)果:" + (str === str1));// false 類型相同, 值不同 console.log("========================="); let objStr = '{"a":10,"b":"hello"}'; console.log("對象與字符串 == 比較" + (objStr == obj)); // false 對象內(nèi)容內(nèi)部結(jié)構(gòu)與字符串表示方式不同 console.log("對象與字符串 === 比較" + (objStr === obj));// false 類型不同
輸出:
==========================
{a: 10, b: 'hello'}
對象之間比較,== 與 === 結(jié)果相同
obj == obj1結(jié)果:false
obj === obj1結(jié)果:false
==========================
String與Number之間比較
String == Number結(jié)果:true
String === Number結(jié)果:false
同類型值相同 == 結(jié)果:true
同類型值相同 === 結(jié)果:true
同類型值不同 == 結(jié)果:false
同類型值不同 === 結(jié)果:false
=========================
到此這篇關(guān)于詳解JavaScript運算符中==和===的區(qū)別的文章就介紹到這了,更多相關(guān)JavaScript運算符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS、jquery實現(xiàn)幾分鐘前、幾小時前、幾天前等時間差顯示效果的代碼實例分享
在新浪微博首頁看到每條微博后邊顯示的時間并不是標準的年-月-日格式,而是經(jīng)過換算的時間差,如:發(fā)表于5分鐘前、發(fā)表于“2小時前”,比起標準的時間顯示格式,貌似更加直觀和人性化2014-04-04一個級聯(lián)菜單(IE ONLY),不過代碼很精簡!
一個級聯(lián)菜單(IE ONLY),不過代碼很精簡!...2006-10-10