学习

27 阅读2分钟

防抖节流的使用场景 防抖:在停止事件n秒后再发送请求。 场景:搜索框发送请求 窗口大小调整 按钮防止重复点击 文本编辑器自动保存 节流:在单位时间n秒内只发送一次请求 滚动时间,每100ms检查是否滚动到底部。鼠标移动拖拽,每50ms更新元素的位置。高频的点击射击游戏,控制玩家每秒发送3枚子弹 手写promise 软绑定:可以根据函数引用的上下文动态修改this的值,硬绑定:一旦默认的this的值确定下来,就不会发生改变。 硬绑定使用场景:适合需要强制固定this的场景,回调函数中的this不丢失(定时器,事件监听),创建一个原函数相同但this固定的新函数。 软绑定:可以根据函数使用的上下文动态的绑定this的值 p.proto===Promise.protoType p instanceof Promise p.constructor===Promise 上面三个都为true 箭头函数如果在window和node.js严格模式下,输出的this都为undefined,如果window和node.js在非严格模式下,this会指向window对象和global对象 globalThis,在window下为window对象,在globalThis下为global对象 构造函数和普通函数: 构造函数必须用new 调用,普通函数直接调用 构造函数返回新创建对象的实例,如果有显式的返回对象类型,就会覆盖新创建的对象的实例。普通函数默认return后面的类型,如果没有return 默认返回undefined 构造函数的this指向新创建的实例的对象,普通函数的this指向调用普通函数执行的上下文。 对象的键是无序的,isEqual(x[key],y[key])并不在意key的值的顺序,只要x对象有key值,y对象有key值,就会进行比较 NaN===NaN会等于false +0===-0会等于true 对象的键分为可枚举和不可枚举,可枚举可以使用 for in keys values遍历 不可枚举在defineProperty时定义enumerable为false,用keys values获取不到键值,用entries无法获取到键值对 应用场景不同:可枚举通常用于业务属性,需要被遍历,序列化 不可枚举用于内部属性,避免被意外遍历和修改 将类数组对象转成数组对象 有length属性的都是类数组对象,类数组对象可能的情况getElementsByTagName,querySelectorAll,function的arguments对象也是类数组对象 用Array.from() 扩展运算符,只能用于iterable对象,即拥有System(System.iterator)的属性值