【综合】js基础
1. 隐式类型转换
- P 表示toPrimitive
- 先调用
valueOf
若返回不是原始类型- 原始类型的包装类型调用
valueOf
会返回原始类型(例如String,BigInt)
- 原始类型的包装类型调用
- 再调用
toString
若返回不是原始类型 - 则报错
- 先调用
所有比较都有转化为数字类型的趋势
2. 实现函数缓存
1 | const memoize = function (fun, content) { |
3. requestAnimationFrame
window.requestAnimationFrame(callback)
- 作用: 告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画
- 参数: callback回调函数,第一个参数是回调函数被触发时的时间戳。
1 | const element = document.getElementById("some-element-you-want-to-animate"); |
4. 严格模式
1 |
- 禁止使用关键字声明变量
1 | let x = true; |
5. this指向
1 | (obj.fn2)(); // 函数内this指向obj |
- 获取url参数
1
2let searchUrl = link.search.substr(1); // 获取问号后面字符串
let hashUrl = link.hash.substr(1); // 获取#后面的值1
2
3
4
5
6
7let URL = "http://www.baidu.com?name=elephant&age=25&sex=male&num=100"
function queryURLParams(URL) {
let url = URL.split("?")[1];
const urlSearchParams = new URLSearchParams(url);
const params = Object.fromEntries(urlSearchParams.entries());
return params
}
6. 闭包
作用
- 模拟私有变量
- 阻止变量被回收
闭包导致的内存泄露
持有不需要的函数引用,导致函数关联词法环境无法销毁
1
2
3
4
5function useArr(){
const arr = [1];
return ()=> arr;
}
const arr = useArr();当多个函数共享词法环境,导致出现无法触及也无法回收的内存
1
2
3
4
5
6
7
8function useArr(){
const arr = [1];
function fn(){
arr;
}
return ()=> [];
}
const arr = useArr();
继承
7. class
class 是ES6的新的实现继承的方式,他的本质还是寄生式组合继承
特点:
- class 必须用new调用
- class 没有变量提升