淺談 js 字符串之神奇的轉義



字符串在js里是非常常用的,但是你真的了解它么?
翻閱《MDN String》就可以了解它的常見用法了,開門見山的就讓你了解了字符串是怎么回事。

'string text'
"string text"
"中文 español English हिन्दी العربية português বাংলা русский 日本語 ਪੰਜਾਬੀ 한국어"

可以看到,可以直接使用任意字符。
PS: 如果的你文件編碼是GBK或者ANSI的,其他國家語言會顯示成 ?,修改為 UTF-8 (unicode) 編碼后才能正確輸入。

ANSI (win8 中文,所以默認是 GBK)

UTF-8 或者其他類型 unicode 編碼即可。

而且在下面也提到了轉義,不過這里的轉義格式不全,只是簡單給了個表,而沒有全部介紹。
其實js還支持八進制轉義,可以在 MDN JavaScript GuideValues, variables, and literals#String literals 一節中找到。 
這里明確說了 八進制 轉義的格式 \XXX,如果用正則表達式表示的話,大概是 /\\[0-7]{1,3}/ 這樣的格式。
也就是說 \ 開頭然后 1-3[0-7] 數字格式。
所以 \8 \09 \189 之類的都是無效的,不過也能正常使用,因為 \8 \09 \189 會分別識別成 8, \09 , \189

當然 \0 \1 是不可顯示字符,所以我們是看不到的,只能通過 length, charCodeAtescape 等其他方法,來確認它的存在。

八進制 的格式是有范圍的,它和 十六進制 的范圍一樣,都是 0-255,只是表達格式不一樣而已。
八進制 表示為 \0 \377,而 十六進制 則是 \x00 - \xff
只是表現格式不一樣,實際值是一樣的,都是十進制中的 0-255,說的官方點叫做 Latin-1 (iso-8859-1) 編碼。
例如 x 的ASCII碼值為 120,八進制為 170 十六進制為 78,所以  "x \170 \x78" === "x x x" 。

現在我們知道了除了 \b \f \n \r \t \v \' \" \\ 轉義 和 \xXX 十六進制轉義 \uXXXX Unicode編碼 外還有 \XXX 八進制轉義

其他任何不屬於這些轉義的字符都會直接輸出原字符並且忽略轉義符。
如  "\a\8\呵" === "a8呵"  是完全等價的。
當然如果你輸入 "\x \u" 則會報錯,因為 \x 是 十六進制轉義符,后面沒有轉義數據,所以出錯,\u 也是一樣。

還有一個不常用的功能,可以利用轉義符號 \ 進行字符串折行,或者叫 "heredoc" 之類的效果。

var str = "123\
456";
console.log(str === "123456");

他倆完全相等,\ 並沒有轉義,也沒有保留換行,而是連同換行一並去除了。
我們可以測試下:

eval('var s1 = "123\\\r\n456", s2 = "123\\\n456"');
console.log(s1 === "123456");
console.log(s2 === "123456");

可以看,不論是 \n 還是 \r\n 都被忽略了。

好了,小知識點分享完畢,如有不對之處,還望跟帖指出,以免誤導大家,小生在此先謝過了。


免責聲明!

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



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