iT邦幫忙

2

【JavaScript】"9" > "12" //true

  • 分享至 

  • xImage
  •  

【前言】
本系列為個人前端學習之路的學習筆記,在過往的學習過程中累積了很多筆記,如今想藉著IT邦幫忙這個平台做整理+再複習。
本系列標題一律以【】標示該篇文章主要涉及的內容,例如【JavaScript】、【Vue】等等。
若內容有誤,還麻煩各路大神不吝於點出問題,感激不敬。


"9" > "12" ?

今天的主題比較小,算是一個個人學習過程中誤打誤撞出現的狀況
在JavaScript的世界中,當我們使用比較運算子時,會回傳一個結果

console.log(9 > 12); //false

在這個案例中回傳false,9沒有大於12,這非常好理解

但在JavaScript的世界中,存在所謂的自動轉型
當型別不同的東西被放在比較運算子兩邊時,就會出現一些奇奇怪怪的情況
例如這個案例中,true被自動轉型成1,因為1 > 0,回傳true

console.log(true > 0); //true

因此我在學習的過程中通常就會去記一些重點案例,例如true會被轉型成1,false會轉型成0
一次偶然的情況下我遇到了這樣的情況:

console.log(9 > "12"); //false
console.log("9" > "12"); //true

這就讓我深感困惑了
第一行很好理解,字串"12"被轉型成數字12,因此回傳false
但第二行就很讓人困惑了,原先以為會是兩邊都被轉型成數字,然後因為9小於12所以回傳false
但結果並非如此

"9" > "12"的原因

後來經過查找資料,終於發現原因
因為運算子在採用 > 或 < 比較字串時,運算元會透過 Unicode 編碼的值來比較
所以才會有這樣的情況發生

因為"9"的Unicode 編碼值是57
而"12"的Unicode 編碼值49
所以會變成57 > 49,自然就會回傳true了


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

2 則留言

0
harry xie
iT邦研究生 1 級 ‧ 2022-03-23 11:34:57

長知識了

3
黃升煌 Mike
iT邦研究生 5 級 ‧ 2022-03-24 14:25:13

這樣解釋有點不太對,"12" 是兩個字元,"1" 的編碼才是 49,所以實際試試比較 "9" > "1" 成立,結果為 true

哪尼,受教了
想請問那"12"是兩個字元的情況下,javascript到底是如何看待"9">"12"的
"9"是被轉成57
那"12"是只有"1"的部分轉成49,"2"就忽略不計還是會怎麼處理呢?

沒錯,實際上就是比較到 "9" > "1" 就結束了

原來如此,所以2就完全不管這樣
好奇想請問為何後面的都會被忽略不計呀?
是因為判斷時被認定為字串會優先比較首字(?

我要留言

立即登入留言