JavaScript:打破所有规则(1)(4)
译者注
上面说了这么多,我自己也想到一个被误解的东西,那就是escape.网上有不少人说:"不要使用escape".
为什么说它是有用的?
1.escape转义的字符更多,有时候需要转义后两个函数不转义的字符.
ASCII char | escape() | encodeURI() | encodeURIComponent() |
---|---|---|---|
! | %21 | ! | ! |
# | %23 | # | %23 |
$ | %24 | $ | %24 |
& | %26 | & | %26 |
' | %27 | ' | ' |
( | %28 | ( | ( |
) | %29 | ) | ) |
+ | + | + | %2B |
, | %2C | , | %2C |
/ | / | / | %2F |
: | %3A | : | %3A |
; | %3B | ; | %3B |
= | %3D | = | %3D |
? | %3F | ? | %3F |
@ | @ | @ | %40 |
~ | %7E | ~ | ~ |
2.将字符串转换为UTF8编码,通常用在base64的时候.
escape相当于是在utf16编码的字符串上转义,
encodeURIComponent
相当于是先把utf16的字符串转换成utf8编码后再escape.
encodeURIComponent
(str) === escape(UTF16ToUTF8(str))
可以推导出UTF16ToUTF8(str) === unescape( encodeURIComponent( str )
然后就能用在base64编码的时候,比网上看到的那些简单多了吧.注意btoa和atob有兼容问题.
- function base64Encode(str) {
- return btoa(unescape(encodeURIComponent(str)));
- }
- function base64Decode(str) {
- return decodeURIComponent(escape(atob(str)));
- }
- 上一篇:使用node.js开发前端打包程序
- 下一篇:JS游戏开发(五)可移动地图的实现