算法题
解析URL Params为对象
let url = 'http://www.domain.com/?user=anonymous&id=123&id=456&city=%E5%8C%97%E4%BA%AC&enabled';
parseParam(url)
/* 结果
{ user: 'anonymous',
id: [ 123, 456 ], // 重复出现的 key 要组装成数组,能被转成数字的就转成数字类型
city: '北京', // 中文需解码
enabled: true, // 未指定值得 key 约定为 true
}
*/
实现一个简单的模版渲染
let template = '我是{{name}},年龄{{age}},性别{{sex}}';
let data = {
name: '姓名',
age: 18
}
render(template, data); // 我是姓名,年龄18,性别undefined
var proxy = new Proxy(target, handler);
```let template = '我是{{name}},年龄{{age}},性别{{sex}}';
let data = {
name: '姓名',
age: 18,
};
console.log(render(template, data)); // 我是姓名,年龄18,性别undefined
function render(template, data) {
let reg = /\{\{([a-z]+)\}\}/;
if (reg.test(template)) {
let item = reg.exec(template)[1];
template = template.replace(reg, data[item]);
return render(template, data);
}
return template;
}
## 基础知识
### JS易混淆的基本方法
#### slice(原数组/字符串不发生变化,返回的为截取的数组)
1. 字符串
- 如果只有一个参数,则从该参数截取到末尾
- 如果两个参数,从2-7(但不包括7)
- 如果是负数,-1是最后一个字符,前面必须比后面小,不包含后面的数
```javaScript
var str="Hello World";
var str1=str.slice(2); //如果只有一个参数,则提取开始下标到结尾处的所有字符串
var str2=str.slice(2,7); //两个参数,提取下标为2,到下标为7但不包含下标为7的字符串
var str3=str.slice(-7,-2); //如果是负数,-1为字符串的最后一个字符。提取从下标-7开始到下标-2但不包含下标-2的字符串。前一个数要小于后一个数,否则返回空字符串
console.log(str1); //llo World
console.log(str2); //llo W
console.log(str3); //o Wor
-
数组 同字符串
-
对象 无
splice(改变原数组,返回的是删除的数组)
数组
- 有三个参数
- 第一个参数,起始位置
- 第二个参数,要删除个数,如果设置为0,则不会删除
- 第三个参数,新增新增项目的内容
split
字符串
- 有两个参数,第一个参数是指以什么字符进行分割,第二个参数指返回数组的最大长度
- 第一个参数为空字符串,则字符串的每个字符都要分割
var str="AA BB CC DD";
var string1="1:2:3:4:5";
var str1=str.split("");//如果把空字符串 ("")用作分割符,那么字符串的每个字符之间都会被分割
var str2=str.split(" "); //以空格为分隔符
var str3=str.split("",4); //4指定返回数组的最大长度
var str4=string1.split(":");
console.log(str1); // ["A", "A", " ", "B", "B", " ", "C", "C", " ", "D", "D"]
console.log(str2); //["AA" "BB" "CC" "DD"]
console.log(str3); //["A", "A", " ", "B"]
console.log(str4); // ["1", "2", "3", "4", "5"]
join
数组 将数组连接成字符串,并规定连接符
var arr = [1,2,3];
console.log(arr.join()); // 1,2,3
console.log(arr.join("-")); // 1-2-3
console.log(arr); // [1, 2, 3](原数组不变)