在前端開發(fā)中,我們常常需要將 JavaScript 的數(shù)據(jù)序列化為 JSON 格式,然而,在這個過程中我們需要注意對字符進(jìn)行轉(zhuǎn)義以確保數(shù)據(jù)能夠順利傳輸,這就引入了 Escape 函數(shù)。
Escape 函數(shù)的作用是將字符串中的非 ASCII 碼字符進(jìn)行編碼,以便它們能夠在所有計算機(jī)上以相同的方式正確傳輸。其實(shí)現(xiàn)方式是將字符串中的非 ASCII 碼字符和一些特殊字符(例如分號、雙引號等)轉(zhuǎn)化為一個由百分號和十六進(jìn)制數(shù)編碼的字符串。
const str = "這是一個測試文本!"; const output = escape(str); console.log(output); //輸出:%u8FD9%u662F%u4E00%u4E2A%u6D4B%u8BD5%u6587%u672C%uFF01
當(dāng)我們將數(shù)據(jù)以 JSON 格式發(fā)送到服務(wù)器時,JSON.stringify 方法會自動進(jìn)行轉(zhuǎn)義,但是在接收到服務(wù)器響應(yīng)后,我們也需要手動對數(shù)據(jù)進(jìn)行解析。JSON.parse 方法就可以將編碼后的字符串轉(zhuǎn)化為 JavaScript 對象或數(shù)組。
// 編碼后的字符串 const encodedStr = "%7B%22name%22%3A%22John%22%2C%22age%22%3A30%7D"; const decodedObject = JSON.parse(decodeURIComponent(encodedStr)); console.log(decodedObject); //輸出:{name: "John", age: 30}
escape 函數(shù)和 JSON 的使用已經(jīng)非常普遍,但是需要注意的是,由于 escape 函數(shù)不支持 UTF-8 編碼,可能會產(chǎn)生一些莫名其妙的問題。為了避免這些問題,我們可以使用其他編碼函數(shù),例如 encodeURIComponent/decodeURIComponent。