iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 4
0
自我挑戰組

JavaScript核心篇系列 第 11

【JavaScript 核心】==、=== & 隱性轉型

  • 分享至 

  • xImage
  •  

寬鬆相等== & 嚴格相等 ===

嚴格相等:除了比對值以外,還會比對型別。不會自動轉型。

console.log(1 === '1'); //false
console.log(1 === 1); //true
console.log(1 !== '1'); //true

//特殊案例
console.log(NaN === NaN); //false
console.log(+0 === -0); //true

寬鬆相等會自動轉型。

  1. 布林與字串:與其他型別比較時,會被轉為數值。
  2. Null 、Undefined 不會自動轉成數字型別。
  3. 物件與非物件比對時,會使用包裹物件來轉換。

特殊例子

console.log(17 == '0X11'); //true
//16進位制 16+1

布林與字串
兩者皆會被轉為數值

console.log(true == 'true'); //false
// 1 == NaN 
//字串無法被轉為數值

布林與數值

console.log(Number(true));
console.log(true == '1');
//true

特殊例子 2

console.log('1' == !0); //true

'1'會自動轉型為數值 得到 1
0 為 false, !0 為 true , 轉成數值 true = 1
因此得到比對結果為 true

特殊例子 3
null undefined

console.log(null == 0); 
// false // null: 空

console.log(null == undefined); 
//true // 都是 falsy

物件與非物件
使用包裹物件轉換

console.log(Number([10])); //10
console.log(10 == [10]); //true

console.log(String(['A'])); //A
console.log('A' == ['A']); //true
console.log( String({A: 'A'}) ); //[object object]

物件與物件

console.log({} == {}); //false
物件具有傳參考性質
每個物件都是獨立的
就算物件內容相同,也不相等

var a = [];
var b = a; 
console.log(a == b); //true
console.log(a === b); //true
//物件有傳參考性質,b 參考的是 a 的內容,故相等

上一篇
【JavaScript 核心】運算子 & 優先性 & 相依性
下一篇
【JavaScript 核心】Truthy & Falsy / 邏輯運算子
系列文
JavaScript核心篇19
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言