JavaScript教程筆記(5)-字串
定義
字串就是放在單引號或雙引號之中的若干個字元。單引號字串的內部可以使用雙引號,雙引號字串的內部可以使用單引號。
'abc'
"abc"
'name = "abc"'
"It's ok"
上面這些都是合法的字串。
如果要在單引號字串內部使用單引號,就必須加上反斜槓,用來轉義。同理,雙引號字串內部使用雙引號,也是如此。
'Did she say \'Hello\'?' // "Did she say 'Hello'?"
"Did she say \"Hello\"?" // "Did she say "Hello"?"
長字串
字串預設只能寫在一行內,像下面這樣直接分成多行將會報錯。
'a
b
c'
// 報錯
如果需要分成多行,可以在每一行的尾部使用反斜槓,像這樣:
'a \
b \
c'
注意,反斜槓後面必須是換行符,而不能有其它字元(比如空格),否則報錯。
長字串分成多行的另一種方法是使用連線運算子(+),像這樣:
'a'
+ 'b'
+ 'c'
轉義符
反斜槓(\)在字串內用來表示一些特殊字元,所以又被稱為轉義符。
- \0 :null(\u0000)
- \b :後退鍵(\u0008)
- \f :換頁符(\u000C)
- \n :換行符(\u000A)
- \r :回車鍵(\u000D)
- \t :製表符(\u0009)
- \v :垂直製表符(\u000B)
- ’ :單引號(\u0027)
- " :雙引號(\u0022)
- \ :反斜槓(\u005C)
上面程式碼中,例如 \n 表示換行,則這樣輸出的時候就會分成兩行。
console.log('1\n2')
// 1
// 2
字串與陣列
字串相當於字元陣列,因此可以使用陣列的方括號運算子,來返回某個位置的字元。
var s = 'hello';
s[0] // h
s[4] // o
'hello'[1] // "e"
但是,無法改變字串中的單個字元,像下面這樣的操作將會默默地失效。
var s = 'hello'; delete s[0]; s // "hello" s[1] = 'a'; s // "hello"
字符集
JavaScript使用Unicode字符集,每個字元的長度固定為16位(UTF-16),即2個位元組。
Base64轉碼
有時,文本里麵包含一些不可列印的符號,比如 ASCII 碼0到31的符號都無法打印出來,這時可以使用 Base64 編碼,將它們轉成可以列印的字元。另一個場景是,有時需要以文字格式傳遞二進位制資料,那麼也可以使用 Base64 編碼。
所謂 Base64 就是一種編碼方法,可以將任意值轉成 0~9、A~Z、a-z、+和/這64個字元組成的可列印字元。使用它的主要目的,不是為了加密,而是為了不出現特殊字元,簡化程式的處理。
JavaScript 原生提供兩個 Base64 相關的方法。
- btoa():任意值轉為 Base64 編碼
- atob():Base64 編碼轉為原來的值
var string = 'Hello World!';
btoa(string) // "SGVsbG8gV29ybGQh"
atob('SGVsbG8gV29ybGQh') // "Hello World!"
注意,這兩個方法不適合非 ASCII 碼的字元,像下面這樣就會報錯。
btoa('你好') // 報錯
要將非 ASCII 碼字元轉為 Base64 編碼,必須先插入一個轉碼環節,再使用這兩個方法。
function b64Encode(str) {
return btoa(encodeURIComponent(str));
}
function b64Decode(str) {
return decodeURIComponent(atob(str));
}
b64Encode('你好') // "JUU0JUJEJUEwJUU1JUE1JUJE"
b64Decode('JUU0JUJEJUEwJUU1JUE1JUJE') // "你好"
注:本文原始內容來自 JavaScript 教程,略有修改。