js(學習筆記) ---- 九層之臺,起於累土;javascript
都是等於比較 == 相對比較 === 嚴格比較java
// == 相對等於 兩邊值類型不一樣時,會發生隱式類型轉換 再比較
// 當比較兩個值時 若是類型不一樣 會轉換成相同類型 再進行比較
// 其餘類型 跟 數字進行比較時 先轉換成數字 再進行比較
// Number()
console.log('2' == 2) // Number('2') == 2 => true
console.log('' == 0) // Number('') == 0 => 0 == 0 => true
console.log([] == 0) // Number([]) == 0
console.log(false == 0) // 0 == 0 => true
console.log(true == 1) // 1 == 1 => true
// 其餘類型跟boolean值進行比較 兩邊值都轉換成數字 再比較
// true => 1
// false => 0
'' == false // Number('') == Number(false) => true
[1] == false // Number([1]) == Number(false) => 1 == 0 => false
// 字符串和引用類型進行比較 把引用類型轉換成字符串
// 每一個對象數據類型 toString() 轉換成字符串
var obj = {}
// obj.toString() => "[object Object]"
// abc' == "[object Object]"
'abc' == obj // false
console.log("[object Object]" == obj)
var obj2 = { id: 1, title: 'title' }
// {} 普通對象 轉換成字符串 都是 "[object Object]"
obj2.toString() // "[object Object]"
var arr = [1]
// arr.toString() => '1'
'1' == arr // '1' == arr.toString() => '1' == '1' => true
var ary = [1, 2, 3, 4]
'2' == ary // '2' == "1,2,3,4"
// ary.toString() => "1,2,3,4"
"1,2,3,4" == ary // "1,2,3,4" == "1,2,3,4" => true
// 引用類型與引用類型進行比較
// 只要你建立一個對象 var 變量 = {}
// 瀏覽器就會分配一起新的內存
// o1 o2 存儲的是兩塊不一樣內存的引用地址
// 內存1 xxxfff111
var o1 = {id: 1}
// 內存2 xxxfff222
var o2 = {id: 1}
// 內存3 xxxfff333
var a1 = []
// xxxfff111 == xxxfff222
console.log(o1 == o2)
// xxxfff111 == xxxfff333
console.log(o1 == a1)
// 假設引用地址 xx2
var o4 = {title: 'o4'}
// o5 = xx2
var o5 = o4
// xx2 == xx2
console.log(o5 == o4)
// 特殊記
// NaN 跟任何值都不相等(包括跟本身)
NaN == NaN // false
NaN == null
NaN == 0
// null 和 undefined 相對比較 爲true
console.log(null == undefined) // true
// 它兩和其餘類型都不相等
null == 0 // false
// == 相對比較時 比較規則
// 1.其餘類型跟數字進行比較時 先轉換成數字 再進行比較
// 2.其餘類型跟boolean值進行比較 兩邊值都轉換成數字 再比較
// 3.字符串和引用類型進行比較 把引用類型轉換成字符串
// 4.引用類型和引用類型比較 比較的是引用地址
// 5.特殊記 NaN null undefined
// === 絕對等於 不會進行類型轉換
// 兩邊類型不一樣 直接就返回false
// 若是類型相同 就比較具體值
// 引用類型和引用類型比較 比較的是引用地址
'1' == 1 // true
'1' === 1 // false
null === undefined // false
// 儘可能用===嚴格比較
'1' == 1
// eslint 代碼檢查工具 規範代碼
// != 相對不等於 會類型轉換
// !== 嚴格不等於
// 0 '' null undefined NaN 都是false
// []轉換成boolean 是true 取反後 false
// ![] => !true => false
console.log([] == ![]) // [] == false => 0 == 0 => true
複製代碼
----------------------------------------------------------------------------------------------------------------
參考文章&&強烈推薦:布羅利瀏覽器