js字符串和數字之間的大小對比!


在進行比較時js會先將兩邊的類型自動轉成一致再對比。

比較首先分為以下幾種情況:

1、純數字之間比較:1<2  //true;(不解釋)

 

2、純數字與數字型字符串之間比較:222 <  '30'  //false  (此時數字型字符串會轉成純數字再與前面的純數字比較,即222與30相比誰大?當然22嘍!)

ps:這里為啥要把字符串轉成數字,而不是把數字轉成字符串再做對比?

比如將上面的數字222轉‘222’再與'30'對比,那結果就是true了!(字符串做對比,字符串對比接下來會說。),可是實際操作卻不是這樣。。。

但javascript比較奇怪,相比將數字轉成字符串,js會優先選擇將字符串轉成數字。(如果數字轉成字符串,那字符串之間再進行字符編碼對比,而之間將字符串轉成數字就直接對比了)

 

3、數字與其他字符串之間的比較:222 < 'abc'  //false

這種情況下,js會將字符串轉成數字,但abc不能轉為數字,js轉數字的方法:parseInt('abc'),如果解析不到數字,則將返回一個NaN的值。所以'abc’轉換的結果永遠

是NaN,所以結果永遠是false(即222 > 'abc'  //false)。

ps:這時候又想問:為什么不能將abc轉成ASCII碼再對比?

那么js就要解釋了:因為222是數字,不是字符串,不能轉ASCII碼,js本着一視同仁的態度就是這個結果了。。。(js有自己的基本准則,它按自己的基本法走)

 

4、數字型字符串之間比較:'222'<'30'  //true;    '5'>'10' //true

這種比較為ASCII碼比較,依次取每個字符,字符轉為ASCII碼進行比較,ASCII碼先大的即為大;因為第一個字符3比2大所以后面就不用考慮了;

 

5、其他字符串之間比較:'d'>'abc' //true;

字符串比較為ASCII碼比較,d的ASCII碼為100,而a的ascii碼為97所以結果為true;

總結一下:

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

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

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


免責聲明!

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



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