iT邦幫忙

0

JS 寬鬆相等、嚴格相等以及隱含轉型 DAY54

嚴格相等
型別與內容 "皆" 需相等

// 內容一樣 型別不一樣 false
console.log(1 === '1'); 
// 內容一樣 型別一樣 true
console.log(1 === 1); 

若要將嚴格相等改成否定
需改成(!==)

// 左邊的 1 是不是 跟右邊的 1 不一樣
// 不一樣 回傳 true
console.log(1 !== '1'); 
// 一樣 回傳 false
console.log(1 === 1); 

少見的幾種情況

console.log(NaN === NaN); //false
console.log(+0 === -0); //true

寬鬆相等

// 內容一樣 型別不一樣 true
console.log(1 == '1'); 
// 內容一樣 型別一樣 true
console.log(1 == 1); 

那它的規則是什麼??

// 布林,字串 與其它型別比對會轉成 "數值(Number)"
console.log(1 == '1'); 
// 將右方轉成數值1
console.log(Number('1'));

ex1:

// 0x 將數值轉成16進位
// 0x11 --> 16 + 1
console.log(17 == '0x11'); //true
console.log(Number('0x11')); //17

ex2:
布林 字串相比

// 左右邊皆會轉成數值
console.log(true == 'true'); // false
console.log(Number('true')); // NaN

那到底要怎麼轉換呢??

// 我們把它改成 布林true
console.log(Number(true)); // 數值1
所以我們應該改成這樣
console.log(true == '1'); // true
console.log(false == '0'); // true
console.log(true == 1); // true
console.log(false == 0); // true

若要改成否定 !=
console.log(1 != '1'); // false 

延伸案例

// 0 代表false !0 代表true
// 布林比對 轉成數值
// console.log(Number(true)); // 1
// console.log(Number('1')); // 1
// 所以為true
console.log('1' == !0); //true

Null , Undefined
null 與 undefined 不會轉成數值型別

console.log(Number(null), Number(undefined)); // 0 NaN
console.log(null == 0); // null不會轉數值 false
console.log(null == undefined); // true
console.log(null === undefined); // false

物件與非物件

// 物件與非物件比對,使用包裹物件轉換
console.log(Number([10]));
console.log(10 == [10]); // true
console.log(String(['a'])); 
console.log('a' == ['a']); // true

// 純物件比對
// 通常不會這樣比對
console.log(String({a: 'a'})); // [object Object]
console.log('[object Object]' == {a: 'a'}) ; // true
// 物件與物件比對 是比對 "參考位置"
console.log({} == {}); //false
console.log([] == []); //false

// 延伸案例
var a = [];
var b = a;
console.log(a === b); //true
// 參考位置相同

那今天的介紹就到這裡
若有任何問題 或 內容有誤
都可以跟我說唷/images/emoticon/emoticon37.gif


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言