iT邦幫忙

2021 iThome 鐵人賽

DAY 22
0
自我挑戰組

轉職軟體工程師的543系列 第 22

【Day 22】JavaScript 的 相等比較

JavaScript 提供三種不同的值比較運算操作:

  • 嚴格相等 (或稱 "三等於"、"全等") 使用 ===
  • 一般相等 ("雙等於") 使用 ==
  • 還有 Object.is //在ES6(ECMAScript 2015)新加入

嚴格相等(===): 不會自動轉型,比較值及型別皆須相等則回傳 true,否則有一任何不相等則回傳 false,但是有一種情況例外,當兩個不同的值都是NaN,則比較兩個不同的 NaN 時會回傳 false。

嚴格比較適合在絕大多數情況下使用。對於所有非數字的值,嚴格比較就如字面:一個值只相等於自己。而數字則使用稍微不同的方式:第一種情況是浮點數 0 同時為正和負,在解決某些數學問題時,+0 和 -0 是不同的,但在大部分情況下我們不需要考慮這種情境,因此嚴格比較將他們視為相同的。第二種情況是非數字,NaN,用來表示某些定義不明確的數學問題的解, 例如:負無窮加正無窮,嚴格比較認為 NaN 不等於任何值,包含他本身。((x !== x)只有在 x 是 NaN 時會是 true。)

x = 5
console.log( x === 5);
console.log( x === "5");

y= NaN
console.log( y === NaN);

https://ithelp.ithome.com.tw/upload/images/20210922/20140399qKViEKnDW1.jpg

一般相等(===): 會自動轉型,一般相等會先將比較值轉換成同型別後比較。轉換後(可能一個或兩個都被轉換),接著進行的幾乎和嚴格比較(===)一樣。

字串比較是依據Unicode編碼的順序

x = 5
console.log( x == 5);
console.log( x == "5");

console.log("a">"b");
console.log("a"<"b");

y= NaN
console.log( y === NaN);

https://ithelp.ithome.com.tw/upload/images/20210922/20140399AvKC2MXjJJ.jpg

Object.is(===): 不會自動轉型,會和嚴格相等做同樣的事,但會將 NaN、-0 和 +0 獨立處理,因此這三個不會相等,而 Object.is(NaN, NaN) 則會回傳 true。-0 和 +0則會回傳 false。

console.log(Object.is( NaN, NaN));
console.log(Object.is( 0, -0));
console.log(Object.is( 3, '3'));

https://ithelp.ithome.com.tw/upload/images/20210922/2014039903sfiuV52z.jpg


上一篇
【Day 21】JavaScript 函式
下一篇
【Day 23】JavaScript 條件(三元)運算子
系列文
轉職軟體工程師的54330
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言