你不知道的 JavaScript 系列中( 30 ) - 比較中的強制轉換型別
阿新 • • 發佈:2020-11-28
var a = [ 42 ]; var b = [ "43" ]; a < b; // true b < a; // false比較雙方首先呼叫 ToPrimitive,如果結果出現非字串,就根據 ToNumber 規則將雙方強 制型別轉換為數字來進行比較
var a = [ "42" ]; var b = [ "043" ]; a < b; // false如果比較雙方都是字串,則按字母順序來進行比較:
var a = [ 4, 2 ]; var b = [ 0, 4, 3 ]; a < b; // falsea轉換為"4, 2",b轉換為"0, 4, 3",同樣是按字母順序進行比較。
var a = { b: 42 }; var b = { b: 43 }; a < b; // false a == b; // false a > b; // false a <= b; // true a >= b; // true
如果a < b和a == b結果為false,為什麼a <= b和a >= b的結果會是true呢? 因為根據規範a <= b被處理為b < a,然後將結果反轉。因為b < a的結果是false,所以a <= b的結果是true。
這可能與我們設想的大相徑庭,即 <= 應該是“小於或者等於”。實際上 JavaScript 中 <= 是 “不大於”的意思(即!(a > b),處理為!(b < a))。同理a >= b處理為b <= a。var a = [ 42 ]; var b = "043"; a < b; // false -- 字串比較! Number( a ) < Number( b ); // true -- 數字比較!