最精要解释,助你快速区分和记住encodeURI和encodeURIComponent

1. js中傻傻分不清楚的几个函数

encodeURI

encodeURIComponent

escape

以及它们对应的解密函数,为了方便记忆,在此不列举,以免造成混乱。

2. 作用

这几个函数主要的作用就是加密uri,目的是因为在正常的url(url是uri的一种,在前端主要涉及它,所以以此为例)中,有些字符是不允许的,比如空格,一旦出现这样的不允许字符,浏览器就不能正常识别url。而有的时候,尤其是后面接参数的时候,却可能需要这样的不允许字符。

怎么办?使用这些函数去加密,从而让浏览器能识别,在使用的时候,再解密。

3. 原理

escape:能够加密ASCALL字符集。众所周知,ASCALL字符集比较小,并不适合很多场景,因此在ECMA-262规范中便规定废弃了,因此这个函数可以不用管。

encodeURI:加密URI,将URI中不允许的字符转化成允许的字符(但语义不变,只是用特殊的UTF-8编码来替换,因此转化前后的URL在浏览器看来是一样的),但是这个转化是只转化URL不允许的字符,允许的字符,即使是特殊字符也不会转化。

encodeURIComponent:这个是最彻底的转化。将所有除了数字字母以外的字符都转化成UTF-8码。因此经过这个函数转化的URL是不能被浏览器识别的。那么它的作用是什么呢?作用就是为了屏蔽浏览器对某些URL的识别。比如,一个URL后面要接参数,而这个参数的值也是URL,那么如果不转化,浏览器会认为是两个URL,从而错误识别。这个时候就需要使用这个函数来转化。当然,正因为此,我们需要被浏览器识别的URL一定不能用这个函数,而不需要识别的经过此函数转化后再接到正常的URL后面即可。而且,顾名思义,后面有component单词,也就是组件的意思,因此它是用来加密URL中一部分字符串(也可以看成是组件)用的,而不是用来加密整个URL的。

你可能感兴趣的:(前端)