JS中常用的编码解码方式
正常的编码解码(非加密)
- escape/unescape:主要就是把中文汉字进行编码和解码(一般只有JS语言支持,也经常应用于前端页面通信时候的中文汉字编码)
1 2 3
| let str = '我是一串中文 @China' escape(str); unescape('%u6211%u662F%u4E00%u4E32%u4E2D%u6587%20@China');
|
- encodeURI/decodeURI:基本上所有的编程语言都支持
1 2 3
| let str = '我是一串中文 @China' encodeURI(str); decodeURI('%E6%88%91%E6%98%AF%E4%B8%80%E4%B8%B2%E4%B8%AD%E6%96%87%20@China');
|
- encodeURIComponent/decodeURIComponent:和第二种方式非常类似,区别在于
encodeURIComponent/decodeURIComponent
会将关键字和保留字也转码掉
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| let obj = { name: '小明', age: 12, url: 'http://www.baidu.com?lx=1&Thyme &time=again', }
for (let key in obj){ str += '${key}=${encodeURIComponent(obj[key])}&'; } str = str,replace(/&$/g, '');
String.prototype.myQueryUrlParameter = function myQueryUrlParameter(){ let reg = /[?&]([^?&=]+)(?:=([^?&=]*))?/g; obj = {}; this.repalce(reg, (...arg)=> { let [,key, value] = arg; obj[key] = decodeURIComponent(value); }); return obj; }
|
a加密编码方式
- 可逆转加密 (一般使用内部约定的规则加密解密)
- 不可逆转加密(一般都是基于MD5加密完成,可能会把MD5加密后的结果进行二次加密)
AJAX中同步和异步
ajax这个任务:发送请求接收到相应主题内容(完成一个完整的HTTP请求)
xhr.send():任务开始
xhr.readyState === 4; 任务结束
同步-一定要等主任务队列完成后,再执行等待任务队列任务
1 2 3 4 5 6 7 8 9 10
| let xhr = new XMLHttpRequest(); xhr.open('get', 'test.json', false); xhr.onreadystatechange = () => { console.log(xhr.readyState); } xhr.send();
|
1 2 3 4 5 6 7 8 9
| let xhr = new XMLHttpRequest(); xhr.open('get', 'test.json', false);
xhr.send(); xhr.onreadystatechange = () => { console.log(xhr.readyState); }
|
1 2 3 4 5 6 7 8 9 10 11
| let xhr = new XMLHttpRequest(); xhr.open('get', 'test.json'); xhr.onreadystatechange = () => { console.log(xhr.readyState); } xhr.send();
|
1 2 3 4 5 6 7
| let xhr = new XMLHttpRequest(); xhr.open('get', 'test.json'); xhr.send(); xhr.onreadystatechange = () => { console.log(xhr.readyState); }
|
1 2 3 4 5 6 7
| let xhr = new XMLHttpRequest(); xhr.onreadystatechange = () => { console.log(xhr.readyState); } xhr.open('get', 'test.json', false);
xhr.send();
|