我也是第一次看见这个问题,起初把URI自以为是的当作URL。
统一资源标识符---URI---Uniform Resource Identifier
统一资源定位符---URL---Uniform Resource Locator
1. encodeURI
是对整个URI进行转义,将URI中的非法字符转换为合法字符,所以对于一些在URI中有特殊意义的字符不会进行转义。 通过将特定字符的每个实例替换为一个、两个、三或四转义序列来对统一资源标识符 (URI) 进行编码 (该字符的 UTF-8 编码仅为四转义序列) 由两个 "代理" 字符组成)。
2. encodeURIComponent
是对URI的组成部分进行转义,所以一些特殊字符也会得到转义。
通过将特定字符的每个实例替换成代表字符的 UTF-8 编码的一个、两个、三个或四个转义序列来编码 URI(只有由两个“代理”字符组成的字符会被编码为四个转义序列)。与 encodeURI() 相比,此函数会编码更多的字符,包括 URI 语法的一部分。
3. escape
生成新的由十六进制转义序列替换的字符串。
和encodeURI的作用相同,不过它们对于unicode编码为oxff之外字符的时候会有区别,escape是直接在字符的unicode编码前加上%u,而encodeURI首先会将字符转换为utf-8的格式,而在每个字节上加%。
网址字符串(url)中,能使用的字符有一定的规定,一般分为元字符和语义字符:
- 元字符:分号(
;),逗号(,),斜杠(/),问号(?),冒号(:),at符(@),and符(&),等号(=),加号(+),美元符号($),井号(#); - 语义字符:a-z,A-Z,0-9,连词号(-),下划线(_),点(.),感叹号(!),波浪线(~),星号(*),单引号('),圆括号(())。
如果使用除了以上字符以外的其他字符,则需要对其他字符进行编码转义,编码的规则一般是根据系统的默认编码,会将每个字符的每个字节都转为一个百分号加上两个大写十六进制字符。
附上几个问题
1. url的参数
new URLSearchParams(window.location.search).get('fxhash')
2. 获取文件格式(文件名包含.时)
数组以.分割,利用pop
3. 哪些情况下会导致内存泄露
a. 意外的全局变量
由于使用未声明的变量,而意外的创建了一个全局变量,使这个变量一直留在内存中无法被回收。
b. 被遗忘的计时器或回调函数
设置了setInterval定时器,而忘记取消它,如果循环函数有对外部变量引用的话,那么这个变量会被一直留在内存中,而无法被回收。
c. 脱离DOM的应用
获取一个DOM元素的引用,而后面这个元素被删除,由于一直保留了对这个元素的引用,所以它也无法被回收。
d. 闭包
不合理的使用闭包,从而导致某些变量一直被留在内存中