事件的取消绑定
- 如果你使用
elem.onclick=()=>{},那么elem.onclick=null - 如果你使用
elem.addEventListener("事件名",回调函数);那么:elem.removeEventListener("事件名",回调函数);- 事件名和回调函数,必须和添加时的一模一样
this的指向
- 单个元素绑定事件this->这个元素
- 多个元素绑定事件this->当前元素
- 箭头函数中的this->外部对象
- 函数中的this->当前正在调用函数的这个人
- 定时器的this->window
ES5强制改变this的指向
call/apply
- 临时的替换了函数的this - 借用
语法
函数名.call(借用的对象,实参,...);- 单独传入每个实参函数名.apply(借用的对象,arr);- 只能传入一个实参要求是一个数组,apply其实会悄悄的打散数组
强调
- call/apply:相当于立刻调用函数,立即执行的
bind
- 永久替换了函数中的this - 买
3件事
- 创建了一个和原函数功能完全相同的新函数
- 将新函数的this永久绑定为了指定对象,别人都借不走
- 将新函数的部分参数永久固定
语法
var 新函数=函数名.bind(永久对象,永久实参,...);- 不是立刻执行,需要自己调用
强调
- bind绑定的新函数没办法被call/apply再次借走
三个固定套路
Math.max/min.apply(Math,arr)- 也能支持数组参数Object.prototype.toString.call/apply(x)==="[object Array]";//判断xx是不也是一个数组- 类数组转为普通数组
接住=Array.prototype.slice.call/apply(类数组对象)接住=Array.from(类数组对象)
ES6
let、const关键字、箭头函数
模板字符串
- 可以直接识别变量,不再需要+运算去拼接了,而且实现了一个简单的js环境,甚至支持再里面书写API
`我的名字叫${name}`
解构赋值
- 解析结构再进行赋值 - 赋值的新方式,并且得到了增强
- 如果赋值符号,左右两边的结构一样的,就会悄悄的解开/脱掉结构再一一的进行赋值
语法
-
类似数组的解构赋值:
let [a,b,c]=[1,2,3]; -
类似对象的解构赋值:
let {a,b=默认值,c}={c:3,a:1,b:2};//形参可以设置默认值,如果自己传入了,就用自己的 -
调用函数时,传递实参的顺序无所谓了
function zwjs({name,age,hobby="女"}){ return `我的名字叫${name},今年${age}岁,喜欢${hobby}`; } -
函数的返回的结果,可以有多个
function f1(){ var a=1; var b=2; return [a,b]; } var [a,b]=f1(); //只要以后见到:方法名({里面放着键值对就是使用了ES6的解构赋值})
Set和Map新的数据类型
-
Set:类似于数组的一种数据格式 - 【去重数组,然后再转回数组】
var s=new Set(arr); ...s - 三个点扩展运算符,可以脱掉数组的外套 一句话完成:[...new Set(arr)] -
Map:类似于对象的一种数据格式
- var m=new Map();
- 添加:m.set("键","值");
- 获取:m.get("键");
- 清空:m.clear();
- 删除:m.delete("键");
新的循环for of
for(var v of arr){
v;
}
- 缺陷
- 没有提供过下标,意味着不能修改原数组
- 只能遍历索引数组,不能遍历hash数组,意味着也不能遍历对象