1. 程式人生 > >JavaScript教程筆記(5)-字串

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 教程,略有修改。