1、取消事件:
1、elem.onclick=()=>{} - 取消:elem.onclick=null;
2、elem.addEventListener("事件名",函数名); -
取消:elem.removeEventListener("当初的事件名",当初函数名);
2、this的指向:
1、单个元素绑定事件this->这个元素
2、多个元素绑定事件this->当前元素
3、定时器中this->window
4、箭头函数的this->外部对象
5、函数中的this->当前正在调用函数的对象
3、强制改变this的指向:
call/apply:临时替换了函数中的this - 借
语法:函数名.call(借用的人,实参,...);
函数名.apply(借用的人,arr);
借用相当于立刻执行
bind:永久替换了函数中的this - 买
语法:var 新函数=函数名.bind(永久绑定的人,永久实参,...);
不会立刻执行的,需要我们需要的时候再去调用。
三个固定套路:
1、获取数组的最大值和最小值:Math.max/min.apply(Math,arr);
//悄悄打散数组,其实还可以这么写:Math.max/min(...arr)
2、判断x是不是一个数组:
Object.prototype.toString.call/apply(x)=="[object Array]"
3、类数组转为普通数组:
var 接住=Array.prototype.slice.call/apply(类数组对象)
- 被代替:Array.from()
4、模板字符串: 我的名字叫${name},今年${age}岁;(不用引号,用1旁边的符号)
5、解构赋值:赋值的新方式
1、类似数组的解构赋值
var [a,b,c]=[1,2,3]; - 函数的return可以返回多个数据
2、类似对象的解构赋值
var {a,b,c}={a:1,c:3,b:2} - 衍生出函数的传参其实顺序是无所谓的
6、Set:将数组去重再转回数组,因为set提供的功能很少
arr=[...new Set(arr)];
7、
for(var v of arr){
v;//当前值
}
不能修改原数组
而且不能遍历hash数组,也就不能遍历对象