自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JS字符串竟然可以比大小?

開(kāi)發(fā) 前端
最近在籌備面試,又開(kāi)始被動(dòng)刷編程題和算法題了。昨天在做一個(gè)字符串變形的題目時(shí),我發(fā)現(xiàn)英文字母竟然可以比大?。?/div>

大家好,我是楊成功。

最近在籌備面試,又開(kāi)始被動(dòng)刷編程題和算法題了。

昨天在做一個(gè)字符串變形的題目時(shí),我發(fā)現(xiàn)英文字母竟然可以比大?。?!比如這樣:

'a' > 'b' // false
'a' < 'b' // true
'a' < 'B' // false

這是什么鬼?好奇心來(lái)了,我要搞懂它。

字符串比較的原理

通常情況下,數(shù)字比大小,就是按照數(shù)學(xué)中的值比較大小,沒(méi)有疑問(wèn)。

而在 JavaScript 中,字符串比較是基于字符的 Unicode 值來(lái)進(jìn)行的。

我查了 26 個(gè)英文字母的 Unicode 碼(大小寫(xiě)不同),發(fā)現(xiàn)它們的 Unicode 碼是連續(xù)的,結(jié)果如下:

  • a~z:從 97 (a) 到 122 (z)。
  • A~Z:從 65 (A) 到 90 (Z)。

從上面的結(jié)果看,我們可以得出兩個(gè)結(jié)論:

  • 任意大寫(xiě)字母的 Unicode 碼都比小寫(xiě)字母的更小。
  • a-z 或 A-Z,Unicode 碼不斷遞增。

現(xiàn)在再看文章前面的比較題,就可以清晰的看到比較結(jié)果:

  • 'a' < 'b' 返回 true (因?yàn)?97 < 98)
  • 'a' < 'B' 返回 false (因?yàn)?97 不小于 66)

多字符如何比較?

當(dāng)比較多字符的字符串時(shí),JavaScript 會(huì)從左向右逐字符比較,直到找到不同的字符或到達(dá)一個(gè)字符串的末尾。

比如,要比較 'cbaa' 和 'cazz' 這兩個(gè)字符串的大小,過(guò)程如下。

第一步:比較第一個(gè)字母的大小,即比較 c 和 c,結(jié)果相等,進(jìn)入下一步。

第二步:比較第二個(gè)字母的大小,即比較 b 和 a,此時(shí) b > a,停止比較。

因?yàn)?b > a,所以 cbaa > cazz,比較結(jié)束。

注意:如果你需要確保大小寫(xiě)不會(huì)影響比較結(jié)果,可以將字符串轉(zhuǎn)換成統(tǒng)一的大小寫(xiě)形式再進(jìn)行比較。

方法是使用 .toLowerCase() 或 .toUpperCase()。

可以做什么

基于以上特性,我們可以判斷某個(gè)字母的大小寫(xiě)。

// 假設(shè)變量 n 是一個(gè)隨機(jī)字母
if(n >= 97 && n <= 122) {
    console.log('小寫(xiě)字母')
}
if(n >= 65 && n <= 90) {
    console.log('大寫(xiě)字母')
}

在字符串變形題目中,需要將大寫(xiě)字母變?yōu)樾?xiě),小寫(xiě)字母變?yōu)榇髮?xiě),那么就可以使用上面的方法判斷,并且轉(zhuǎn)換大小寫(xiě)的。

當(dāng)然,更簡(jiǎn)單的方法是直接使用轉(zhuǎn)換函數(shù),比如:

if(n == n.toLowerCase()) {
    // 小寫(xiě),需要轉(zhuǎn)換為大寫(xiě)
    n = n.toUpperCase()
}
if(n == n.toUpperCase()) {
    // 大寫(xiě),需要轉(zhuǎn)換為小寫(xiě)
    n = n.toLowerCase()
}

記住這個(gè)比較規(guī)則,下次遇到字符串比較的情況,別懵了。

責(zé)任編輯:姜華 來(lái)源: 程序員成功
相關(guān)推薦

2021-11-29 00:17:41

JS符串轉(zhuǎn)換

2010-10-11 15:47:46

MySQL字符串大小寫(xiě)

2010-05-26 15:24:09

MySQL字符串

2021-11-07 07:51:01

JavaString字符串

2009-06-23 14:13:00

Java字符串

2024-04-01 08:41:39

字符串.NET

2010-09-09 11:48:00

SQL函數(shù)字符串

2021-03-08 08:23:24

Java字符串截取

2014-01-02 16:14:10

PostgreSQL字符串

2011-08-10 18:47:18

Cocoa字符串

2023-01-11 16:49:13

MySQL數(shù)據(jù)庫(kù)

2009-07-16 17:01:09

Swing字符串

2010-11-26 09:51:54

MySQL字符串

2010-03-19 13:57:30

Python字符串處理

2010-06-28 15:18:51

SQL Server

2021-03-08 08:57:00

Go 字符串測(cè)試

2010-07-14 12:39:30

Prel字符串

2021-04-26 05:45:43

字符串制表符PyCharm

2021-09-03 09:41:36

字符串時(shí)間復(fù)雜度

2023-08-26 20:21:58

字符KotlinJava
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)