iT邦幫忙

2021 iThome 鐵人賽

DAY 15
1
自我挑戰組

JavaScript 核心觀念系列 第 15

【Day15】寬鬆相等、嚴格相等以及隱含轉型

寬鬆相等( == )

會進行型別轉換後,再對值進行比較

嚴格相等( === )

會比較型別和值是否相同,因此不會有型別轉換發生

範例:

字串、布林會被轉型為數值後,才進行比較,

我們可以使用 Number() 查看轉型後的值

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

// true、1
console.log(Number(true));  // 1
console.log(true == 1);  // true
console.log(true === 1);  // false

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

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

// NaN、NaN
console.log(NaN == NaN);  // false

// null、undefined 不會被轉為數值進行比較
console.log(Number(null));  // 0
console.log(Number(undefined));  // NaN
console.log(null == undefined);  // true
console.log(null === undefined);  // false

物件和非物件的比較,會使用包裹物件進行轉型之後,才進行比較

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

// 'a'、['a']
console.log(String(['a']));  // 'a'
console.log('a' == ['a']);  // true

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

物件與物件比較是依據參考位置來決定的,

也就是根據記憶體位址是否相同來進行比較

// {}、{}
console.log({} == {});  // false

// []、[]
console.log([] == []);  // false

物件和物件比較也是有回傳 true 的時候

let a = ['weiwei'];
let b = a;  // 此時 b 和 a 指向相同記憶體位址
console.log(a == b);  // true
console.log(a === b);  // true

圖解:

其他更多物件的比較我們等到開始講解物件時,再進行說明

如果想了解更多關於寬鬆相等和嚴格相等的回傳結果能到 JS Comparison TableOh My Dear JavaScript 查看

Truthy 與 Falsy

Truthy 與 Falsy 主要是在 if 判斷式內比對是否為 truefalse

假值(Falsy)

假值(Falsy)包含 false0""nullundefinedNaN

轉型成布林值為 false

真值(Truthy)

假值以外全都是真值,主要是用來判斷轉型成布林值時,

值是否為 true,相關說明可到 MDN 參考文件 查看

// ''
// 回傳結果 '執行 else'
console.log(Boolean(''));  // false
if ('') {
    console.log('執行 if');
} else {
    console.log('執行 else');
}

// ' ',字串中加空格
// 回傳結果 '執行 if'
console.log(Boolean(' '));  // true
if (' ') {
    console.log('執行 if');
} else {
    console.log('執行 else');
}

// undefined
// 回傳結果 '執行 else'
console.log(Boolean(undefined));  // false
if (undefined) {
    console.log('執行 if');
} else {
    console.log('執行 else');
}

如果要查詢值為真值(Truthy)或假值(Falsy)時,可到 JS Comparison Table 中的 if() 查看

以上就是今天的內容,感謝觀看!!


上一篇
【Day14】優先性及相依性
下一篇
【Day16】邏輯運算子及函式預設值
系列文
JavaScript 核心觀念30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言