小議 js 下字串比較大小

2021-09-06 17:29:41 字數 1276 閱讀 8179

之前群裡有人問如何比較兩個時間大小,他的時間格式是 2014-08-08 而不是 2014-8-8。

所以我給的方法是 直接比較,如:

var a = "2014-08-08";

var b = "2014-09-09";

console.log(a>b, a很方便不是麼,但是原理是什麼呢?

開啟 ecma 第 11.8.5 節 the abstract relational comparison algorithm

在 4. else, both px and py are strings 處可以看到字串比較的情況。

或者翻開 v8 簡單看下,在 compare 處,

if (is_string(this))

可以看到呼叫了 %_stringcompare,然後開啟這個函式c++原始碼,(反正我是看不懂,就簡單看看而已)

可以看到他一開始不知道比較什麼東西,如果成立就相等,那函式我找到原始碼也沒看懂什麼意思,水平太水了,沒辦法。

直接如果字串長度是0的情況,就可以直接比較出大小。

最後才是關鍵,按每個字元的 charcode 大小進行比較,直到分出大小為止。

舉個例子  a="", b="";  那麼執行  a > b  因為長度都是 0 ,所以在長度比較的時候就得到結果了。

如果  a="a11", b="a2";  那麼  a>b 會得到什麼結果呢?

var a="a11", b="a2";

console.log(a>b, a如果有字元進行比較就不是比長度了,而是按字元逐個進行比較,知道分出大小為止。

a>b  比較,步驟是這樣的:

1.  a[0]=>"a", b[0]=>"a",  他們 charcode 相等,所以比較下乙個。

2.  a[1]=>"1", b[1]=>"2",

1charcode 是 49,2 是 50 ,所以 a[1] 小於 b[1]

差不多就重複這樣的步驟進行對比,直到分出大小或者全部對比結束為止。

而不簡單的比較字串長度。

一句話概括就是按照字典序進行對比。

所以剛才的問題,如果日期格式合適的情況下,直接比較是最方便的啦。

說到這裡,我想起心姐的一篇文章《從字典系排列演算法證明選擇大於努力》

console.log('選擇'>'努力'); // true

因為 "選" 的 charcode 是 36873,"努" 的 charcode 是 21162

好了,今天的分享就這些了。

js 字串數值比較大小

寫專案模組中有乙個功能需要限定乙個inputnumber的上限,onchange超過上限,彈出提示資訊 但是遇到乙個奇葩問題,偶爾沒有超過上限也會彈出超出上限的問題 最後排查出來了問題,是因為後台返回的上限是string 1.比較的都是number console 1 2 毫無疑問 false 2....

python字串比較大小

字串按位比較,兩個字串第一位字元的ascii碼誰大,字串就大,不再比較後面的 第乙個字元相同就比第二個字串,以此類推,需要注意的是空格的ascii碼是32,空 null 的ascii碼是0 ord 函式接受乙個字元 print max 1 2 3 3 print max 31 2 3 31 prin...

Python字串比較大小

字串按位比較,兩個字串第一位字元的ascii碼誰大,字串就大,不再比較後面的 第乙個字元相同就比第二個字串,以此類推,需要注意的是空格的ascii碼是32,空 null 的ascii碼是0,大寫字母和小寫字母的ascii不同 m abc abc bac abc print m 0 m 1 print...