一文帶你搞懂JavaScript中轉(zhuǎn)義字符的使用
說(shuō)起轉(zhuǎn)義字符,大家最先想到的肯定是使用反斜杠,這也是我們最常見(jiàn)的,很多編程語(yǔ)言都支持。
轉(zhuǎn)義字符從字面上講,就是能夠轉(zhuǎn)變字符原本的意義,得到新的字符。常用在特殊字符的顯示以及特定的編碼環(huán)境中。
除了反斜杠以外,在前端開發(fā)中,還有其他幾種轉(zhuǎn)義字符,也是較常見(jiàn)的,本文將對(duì)這些做一個(gè)總結(jié)。
字符串中的轉(zhuǎn)義
使用反斜杠來(lái)表示轉(zhuǎn)義字符時(shí),主要是在字符串中使用。這里就需要了解字符集和編碼等知識(shí),具體可見(jiàn)前文前端開發(fā)中需要搞懂的字符編碼。
字符集就是字符的集合,最常見(jiàn)的 ASCII字符集、Unicode字符集等:
ASCII的任一個(gè)字符都可以被轉(zhuǎn)義,使用的就是反斜杠加上數(shù)字編碼,特殊的也能使用反斜杠加上字母。
Unicode,也能進(jìn)行轉(zhuǎn)義,使用則是反斜杠加上碼點(diǎn)。由于Unicode包含了ASCII的所有字符,且編碼一致,所以都可算編碼轉(zhuǎn)義,而現(xiàn)在前端編程所涉及到的已經(jīng)都是Unicode字符。
一般,反斜杠(\)在字符串中有特殊的含義,用來(lái)和后面的字符一起組合表示一些特殊字符,所以又被稱為轉(zhuǎn)義符。
反斜杠后面可以跟著的字符大致有以下幾種:
- 字母
- 三位八進(jìn)制
- x 加上 兩位十六進(jìn)制
- Unicode碼點(diǎn)
字母
轉(zhuǎn)義字符中最基礎(chǔ)的就是:使用反斜杠\加上字母,表示那些無(wú)法輸入表示特殊含義的字符,常見(jiàn)的有以下幾種:
- \b 后退鍵
- \f 換頁(yè)符
- \n 換行符
- \r 回車鍵
- \t 制表符
- \v 垂直制表符
以前在字符串拼接時(shí),就經(jīng)常使用\n、\t:
"\n " + console.log('test') + "\n "
需要注意的是,這些字母是特殊的可應(yīng)用于轉(zhuǎn)義的字母。
如果是非特殊字母,加上反斜杠,則會(huì)忽略反斜杠,很多字符也是同樣忽略反斜杠:
'\a' // 'a' '\"' // '"' '\?' // '?'
十六進(jìn)制數(shù)字
十六進(jìn)制更常用,它的轉(zhuǎn)義規(guī)則:\x<hex>
,\x
后跟上2位十六進(jìn)制數(shù)。
因?yàn)橹挥袃晌?,范圍是?x00-0xFF,所以這種方式也只能輸出265種字符,其中:
- 0x00-0x7F 和ASCII碼一致
- 0x80-0x9F 表示控制字符
- 0xA0-0xFF 表示文字字符
'\xA9' // '?' '\x75' === 'u' // true '\x67' // 'g'
八進(jìn)制數(shù)字
反斜杠后面跟3位八進(jìn)制數(shù)(),就代表一個(gè)轉(zhuǎn)義字符:
'\251' // '?' '\165' === 'u' // true '\106' // 'F'
取值范圍:000-377,總共也是有256種字符,其中就包含了所有的ASCII碼。
八進(jìn)制和十六進(jìn)制能轉(zhuǎn)義的字符是一樣的,進(jìn)行進(jìn)制轉(zhuǎn)換即可,見(jiàn)前文搞懂JavaScript中的進(jìn)制與進(jìn)制轉(zhuǎn)換。
在JS中,用這兩種方式的轉(zhuǎn)義字符是相等的:
'\xA9' === '\251' // true '\200' === '\x80' // true
Unicode碼點(diǎn)
提到Unicode,首先需明確的一點(diǎn),JS中的字符串是基于Unicode的UTF-16編碼方式。
Unicode字符規(guī)定了碼點(diǎn)和字符平面。
碼點(diǎn)使用從U+0000到U+10FFFF的方位來(lái)表示所有的字符。
如果直接使用碼點(diǎn)來(lái)轉(zhuǎn)義所有的Unicode字符,則使用規(guī)則:\u{<hex>}
,\u
后跟上1-6位的十六進(jìn)制:
'\u{A9}' // '?' '\u{597d}' // '好' '\u{1f604}' // '??'
字符平面又分為基本平面和非基本平面。
其中對(duì)于基本平面(65536個(gè)字符)的字符,轉(zhuǎn)義規(guī)則:\u<hex>
,\u
后跟上4位十六進(jìn)制數(shù):
'\u00A9' // "?" '\u0075' === 'u' // true '\u597d' // '好'
對(duì)于非基本平面的字符,則要使用UTF-16的碼元規(guī)則,一般是兩個(gè)碼元:\u<hex>\u<hex>
,\u
后各4位十六進(jìn)制:
'\uD83D\uDE04' // '??' '\uD83C\uDF34' // '??'
只要獲取到字符的Unicode編號(hào)碼點(diǎn),即可以通過(guò)這種方式轉(zhuǎn)義所有的字符。
正則表達(dá)式中的轉(zhuǎn)義
在正則表達(dá)式中有許多特殊的符號(hào),起著不同的作用,但如果要匹配這些特殊符號(hào)本身,就需要用到轉(zhuǎn)義了。
這里的轉(zhuǎn)義字符也是使用反斜杠,后面跟上需要匹配的符號(hào),即可,如:\+
匹配加號(hào)。
在正則表達(dá)式中,需要反斜杠轉(zhuǎn)義匹配的字符,一共是12個(gè):^ . [ $ ( ) | * + ? { \
,這些字符都是正則的特殊字符。
/5$/.test('5$') // false /5\$/.test('5$') // true
上面代碼,$符號(hào)加了轉(zhuǎn)義才能匹配成功,否則不匹配。
當(dāng)使用RegExp方法時(shí),正則參數(shù)是字符串,反斜杠\
需要2個(gè),因?yàn)樽址畠?nèi)會(huì)先轉(zhuǎn)義一次:
(new RegExp('5$')).test('5$') // false (new RegExp('5\$')).test('5$') // false (new RegExp('5\\$')).test('5$') // true
上面代碼中,只有第三行因?yàn)槭褂昧藘蓚€(gè)反斜杠,才能轉(zhuǎn)義成功,得到正確的值。
HTML中的轉(zhuǎn)義
HTML中轉(zhuǎn)義字符也是較常見(jiàn)的,主要有三種形式的轉(zhuǎn)義。
最常見(jiàn)的是基于實(shí)體名稱:
&
后加上實(shí)體名稱 再加上分號(hào) ;
:
空格
大于號(hào) > >
實(shí)體名稱轉(zhuǎn)義以前是為了處理html中的特殊的字符顯示問(wèn)題,比如小于號(hào) <
在THML中是作為元素標(biāo)簽的一部分使用的,作為特殊字符,直接輸入會(huì)出錯(cuò)。
但目前在現(xiàn)代瀏覽器上,已經(jīng)能正常顯示大于小于號(hào)這些符號(hào),可以不使用轉(zhuǎn)義字符。
另兩種是基于Unicode碼點(diǎn):
&#x
后加十六進(jìn)制碼點(diǎn) 再加上分號(hào) ;
:
😄 => ?? 好 => 好 & => &
&#
后加十進(jìn)制的碼點(diǎn) 再加上分號(hào) ;
:
😄 => ?? 好 => 好 & => &
基于實(shí)體名稱轉(zhuǎn)義的字符,也是被包含在Unicode字符集中的,所以也可以使用碼點(diǎn)來(lái)進(jìn)行轉(zhuǎn)義。
在HTML中最常用到的轉(zhuǎn)義字符,可見(jiàn)下面整理的表格:
字符 | 名稱 | 名稱轉(zhuǎn)義 | 碼點(diǎn)轉(zhuǎn)義 |
---|---|---|---|
" | 雙引號(hào) | " | " |
& | 和號(hào) | & | & |
< | 小于號(hào) | < | < |
> | 大于號(hào) | > | > |
' | 單引號(hào) | ' | ' |
空格 | 空格 | |   |
© | 版權(quán)號(hào) | © | © |
¢ | 分 | ¢ | ¢ |
£ | 鎊 | £ | £ |
¥ | 人名幣 | ¥ | ¥ |
$ | 美元 | $ | $ |
© | 版權(quán) | © | © |
® | 注冊(cè)商標(biāo) | ® | ® |
× | 乘號(hào) | × | × |
÷ | 除號(hào) | ÷ | ÷ |
URL轉(zhuǎn)義字符
另外,在web開發(fā)中,URL鏈接也是有編碼轉(zhuǎn)義的,特別是針對(duì)URL元字符和中文等特殊字符: http://baidu.com/中國(guó)
編碼轉(zhuǎn)義為 http%3A%2F%2Fbaidu.com%2F%E4%B8%AD%E5%9B%BD
可以使用encodeURIComponent 和 decodeURIComponent 對(duì)URL鏈接進(jìn)行編解碼處理。
URL中的轉(zhuǎn)義規(guī)則:根據(jù)系統(tǒng)的默認(rèn)編碼(一般是UTF-8),是使用百分號(hào)(%)
加上兩位的十六進(jìn)制數(shù)。
實(shí)際的轉(zhuǎn)義,就是基于Unicode字符的碼點(diǎn),不過(guò)與字符串不太一樣,這里使用的一般是UTF-8編碼方式。
URL部分元字符的轉(zhuǎn)義:
元字符 | 名稱 | 轉(zhuǎn)義符 |
---|---|---|
+ | 加號(hào) | %2B |
空格 | 空格 | %20 |
/ | 斜杠 | %2F |
? | 問(wèn)號(hào) | %3F |
# | 井號(hào) | %23 |
& | 和號(hào) | %26 |
= | 等號(hào) | %3D |
: | 冒號(hào) | %3A |
@ | at符 | %40 |
, | 逗號(hào) | %2C |
; | 分號(hào) | %3B |
中文等特殊字符則被轉(zhuǎn)義成多個(gè)組合:
encodeURIComponent('http://baidu.com/中國(guó)??') // 'http%3A%2F%2Fbaidu.com%2F%E4%B8%AD%E5%9B%BD%F0%9F%98%84'
上面代碼中,
就有元字符的轉(zhuǎn)義:':' => %3A
、'/' => %2F
,
而中文則轉(zhuǎn)義成:中 => %E4%B8%AD
、國(guó) => %E5%9B%BD
,
表情符號(hào)轉(zhuǎn)義成:?? => %F0%9F%98%84
。
到此這篇關(guān)于一文帶你搞懂JavaScript中轉(zhuǎn)義字符的使用的文章就介紹到這了,更多相關(guān)JavaScript轉(zhuǎn)義字符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS點(diǎn)擊圖片彈出文件選擇框并覆蓋原圖功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了JS點(diǎn)擊圖片彈出文件選擇框并覆蓋原圖功能的實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-08-08JS檢索下拉列表框中被選項(xiàng)目的索引號(hào)(selectedIndex)
這篇文章主要介紹了JS檢索下拉列表框中被選項(xiàng)目的索引號(hào)(selectedIndex),本文通過(guò)實(shí)例代碼圖文詳解的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2019-12-12JS如何設(shè)置cookie有效期為當(dāng)天24點(diǎn)并彈出歡迎登陸界面
這篇文章主要介紹了JS如何設(shè)置cookie有效期為當(dāng)天24點(diǎn)并彈出歡迎登陸界面的代碼,代碼比較簡(jiǎn)單,好理解,需要的朋友可以參考下2016-08-08改進(jìn)UCHOME的記錄發(fā)布,增強(qiáng)可訪問(wèn)性用戶體驗(yàn)
今天是看到UCDChina上的一篇文章文章 ,是關(guān)于SNS的用戶體驗(yàn)問(wèn)題,發(fā)覺(jué)文中提到的第一個(gè)細(xì)節(jié),UCHOME就做的不好,于是改進(jìn)了一下。2011-01-01js和jq使用submit方法無(wú)法提交表單的快速解決方法
下面小編就為大家?guī)?lái)一篇js和jq使用submit方法無(wú)法提交表單的快速解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考2016-05-05IE,firefox(火狐)瀏覽器無(wú)提示關(guān)閉窗口js實(shí)現(xiàn)代碼小結(jié)
在不是js打開的頁(yè)面上按window.close(),會(huì)有提示框,很煩,現(xiàn)在可以不用了,沒(méi)有提示框直接關(guān)閉窗口。下面腳本之家編輯特為大家整理了一些。2009-09-09JS/jquery實(shí)現(xiàn)一個(gè)網(wǎng)頁(yè)內(nèi)同時(shí)調(diào)用多個(gè)倒計(jì)時(shí)的方法
這篇文章主要介紹了JS/jquery實(shí)現(xiàn)一個(gè)網(wǎng)頁(yè)內(nèi)同時(shí)調(diào)用多個(gè)倒計(jì)時(shí)的方法,涉及js與jQuery基于定時(shí)器的時(shí)間相關(guān)操作技巧,需要的朋友可以參考下2017-04-04Textarea根據(jù)內(nèi)容自適應(yīng)高度
使用JAVASCRIPT控制Textarea內(nèi)容自適應(yīng)高度,實(shí)施起來(lái)很簡(jiǎn)單,很平滑。2013-10-10