== 與 === 的區別
1. 對於string,number等基礎類型,== 和 ===是有區別的
- 不同類型間比較,==是“轉化成同一類型後的值”看“值”是否相等,===如果類型不同,其結果就是不等
const a = 1
const b = "1"
a == b #=> true
a === b #=> false
- 同類型比較,直接進行“值”比較,兩者結果一樣
a = 2
b = 2
a == b #=> true
a === b #=> true
總結:
我們平常寫代碼比較基礎類型數據的時候要注意這個區別,知道用== 和 ===的目的
2. 對於Array,Object等高級類型,== 和 ===是沒有區別的
== 和=== 在進行高級類型比較的時候都是對“指針地址”進行比較
[1] === [1] #=> false
[1] == [1] #=> true
// 大家可以思考一下爲什麼下面的爲true, 很簡單喲!
const a = { "a": 1 }
const b = a
b === a #=> true
b == a #=> true
3. 基礎類型與高級類型比較,== 和 ===是有區別的
不多逼逼, 直接上代碼
a = 1
b = [1]
a == b #=> true
a === b #=> false
// 大家看看下面的代碼,可以得出什麼結論呢?(自己先想想, 下面有答案 注1)
var x = 1;
var obj = { valueOf: function() { x = 2; return 0} }
obj == 0 #=> true
obj === 0 #=> false
x #=> 2
總結:
對於將高級轉化爲基礎類型,進行“值”比較.
對於= 因爲類型不同,結果爲 false
== 注1 ==
所以我們平時使用 比較的時候儘量使用===. 因爲對於高級類型和基本類型比較時 == 是有副作用的。
鏈接: 轉載請註明出處喲