不要直接使用數字字符串來比較大小


最近的項目中,后端給我返回來數字是字符串形式的,而根據實際業務需求,我需要進行比較大小。

而我當時考慮的是,js本身屬於弱類型,動態語言

弱類型:

在編程語言中,語言被分為強類型和弱類型,我們將支持隱式轉換的語言稱為弱類型語言,不支持隱式轉換的語言稱為強類型語言,

而js本身開發出來之際由於各種機緣巧合,讓他成為一個弱類型的語言。他有利有弊

 

動態語言:

在聲明變量之前需要先定義變量類型。我們把這種在使用之前就需要確認其變量數據類型的稱為靜態語言。

相反地,我們把在運行過程中需要檢查數據類型的語言稱為動態語言。而JavaScript 就是動態語言,因為在聲明變量之前並不需要確認其數據類型。

 

我當時想的就是,即使用數字字符串比較大小,js也會隱士轉換成對應的數字,但是我確犯了錯誤。

我發現在相同長度時,比較后得到的結果是正確的的,但是當長度不一樣時就有了問題,看下面得情況

'32' < '55' // true
'1' < '2' // true

'32' < '128' // false

按理說128是大於32的,但是確是false。這就很尷尬了 

 

 

后來通過強大的網絡發現了這么一個大秘密:

1、純字符串比較,轉換成ASCII碼在進行比較;

2、純數字和純數字字符串相比較,則將字符串數字隱式轉換成數字再進行比較;

3、純數字和非純數字字符串比較,都返回false;

 

當使用純字符串比較時,js會把它轉換成ASCII碼比較,而不是轉成數字,只有使用純數字和非純數字的時候才會隱式轉換成數字,心里面萬馬奔騰

 

 

同時需要注意

1.數字和字符串比較大小,js會優先將字符串轉成數字來比較(如果將數字轉成字符串,那么還要將字符串轉成字符編碼才能比較,但是將字符串轉成數字就可以直接比較了)

2.非純數字字符串會被轉成NaN,關於NaN:

a. NaN是數字類型,typeof NaN === ‘number’

b. NaN不等於任何數值,包括它本身,只能用isNaN()來判斷

 

參考👏😬

https://blog.csdn.net/qq_40603010/article/details/108377750


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM