📜  JavaScript 中 unescape() 和 escape() 函数的区别(1)

📅  最后修改于: 2023-12-03 15:31:40.238000             🧑  作者: Mango

JavaScript 中 unescape() 和 escape() 函数的区别

在 JavaScript 中,可以使用 unescape()escape() 函数进行 URL 和字符串编码和解码操作,但它们存在着一些区别。

escape()

escape() 函数用于将字符串编码成 URL 可识别的格式。它可以将某些字符(例如空格、标点符号、非 ASCII 字符)转换成 %XX 的形式表示,其中 XX 表示字符的 ASCII 码值的十六进制表示。

escape("你好,世界!") // "%u4F60%u597D%uFF0C%u4E16%u754C%uFF01"
escape("http://example.com/?q=JavaScript 中文") 
// "http%3A%2F%2Fexample.com%2F%3Fq%3DJavaScript%20%u4E2D%u6587"

需要注意的是,escape() 函数会将 Unicode 字符(即大于 0x7F 的 ASCII 字符)转换成 %uXXXX 的形式表示,其中 XXXX 表示字符的 Unicode 码值的十六进制表示。

unescape()

escape() 相反,unescape() 函数用于将 URL 编码的字符串解码成普通字符串。它可以将 %XX 形式的表示转换成对应的 ASCII 字符。

unescape("%u4F60%u597D%uFF0C%u4E16%u754C%uFF01") // "你好,世界!"
unescape("http%3A%2F%2Fexample.com%2F%3Fq%3DJavaScript%20%u4E2D%u6587") 
// "http://example.com/?q=JavaScript 中文"

需要注意的是,unescape() 只能解码 %XX%uXXXX 形式的编码,如果字符串中包含其他非法的 URL 编码形式,unescape() 函数将不起作用。

适用场景

由于 escape()unescape() 函数会将空格、标点符号和 Unicode 字符等特殊字符进行编码和解码,因此它们通常用于处理 URL 参数或者需要在 URL 中传递特殊字符的字符串。

在浏览器中,encodeURIComponent()decodeURIComponent() 函数也可以用于 URL 编码和解码操作,但它们的规则更加严格,只会将特殊字符(例如空格)转换成 %XX 形式,不会对 Unicode 字符进行转换。

小结

escape()unescape() 函数可以将字符串编码成 URL 可识别的形式,并将其解码成普通字符串,适用于处理需要在 URL 中传递特殊字符的字符串。但需要注意的是,在编码和解码 Unicode 字符时,它们的行为与其他函数可能存在差异,需要谨慎使用。