第四周day001

57 阅读3分钟

day001

1、事件的取消绑定:
  • 如果使用elem.on事件名=()=>{},那么写成:elem.on事件名=null; 可以取消事件绑定
  • 如果你使用elem.addEventListener("事件名",callback); 那么写成 elem.removeEventListener("事件名",callback); - 事件名和回调函数,【必须和添加时是一模一样的】
// btn.onclick=e=>{
//     console.log(1)
// }
// btn.onclick=null
   function f1(){
      console.log(1)
      btn.removeEventListener("click",f1)
       }
 btn.addEventListener("click",f1)
2、this的指向
  1. 单个元素绑定事件this->这个元素
  2. 多个元素绑定事件this->当前元素
  3. 箭头函数中this->外部对象
  4. 函数中的this->当前正在调用函数的这个对象
  5. 定时器的this->window
ES5强制改变this的指向

call/apply:临时的替换了函数之中的this - 借用

语法:

  1. 函数名.call(借用的对象,实参,...) - 单独传入每个实参
  2. 函数名.apply(借用的对象,arr) - 只能传入一个事件要求必须是一个数组,apply可以将数组打散
    强调:call/apply:相当于立刻调用函数,立刻执行的

bind:永久替换了函数中的this -

  1. 创建了一个和原函数功能完全相同的新函数

  2. 将新函数的this永久绑定为了指定对象

  3. 将新函数的部分参数永久固定

    语法:var 新函数名=函数名.bind(永久对象,永久实参,...) - 不是立刻执行,需要调用

强调:bind绑定得到的新函数没办法被call/apply再次借走!

三个固定套路:

  1. Math.max/min.apply(Math,arr) ===> Math.max/min(...arr)
  2. Object.prototype.toString.call/apply(arr)=="\[object Array]"//toString不需要传入实参
  3. 类数组转为普通数组:
老方式:接住=Array.prototype.slice.call/apply(类数组对象);
新方法:接住=Array.from(类数组对象)
ES6
let、const关键字、箭头函数
模板字符串:
`可以直接识别变量,不再需要+运算去拼接了,而且实现了一个简单的js环境,甚至支持在里面做运算写API都可以
`
var name="张衡",age=18
console.log(`我是${name},年龄${age}`)
解构赋值:

顾名思义:解析结构再进行赋值 - 赋值的新方式,并且得到了增强!
如果赋值符号,左右两边的结构一样,就会解开结构再一一进行赋值

  • 类似数组的解构赋值
let [a,b,c]=[2,3,4]
console.log(a)
console.log(b)
console.log(c)
  • 类似对象的解构赋值
let {a,b=默认值,c}={c:3,a:1,b:2}
console.log(a);
console.log(b);
console.log(c);
  • 调用函数时
function zwjs({name="无名氏",age,hobby}){
	return `我的名字叫${name},今年${age}岁,喜欢${hobby}`;
		}
			
console.log(zwjs({age:18,hobby:"学习"}))
  • 函数的返回的结果,可以有多个
function f1(){
	var a=1;
	var b=2;
	return [a,b];
		}
var [a,b]=f1();
console.log(a);
console.log(b);

新的循环:
for(var val of 数组名){
      //val - 值
	}

缺陷:
1、没有提供过下标,意味着不能修改原数组
2、只能遍历索引数组,不能遍历hash数组,意味着也不能遍历对象

Set和Map:两个新的数据类型:

Set: 类似于数组的一种数据格式 - 去重数组,然后再转回数组

[...new Set(arr)]
... - 三个点扩展运算符,可以脱掉数组/对象的外套

Map: 类似于对象的一种数据格式

var m=new Map();
添加:m.set("键","值");
获取:m.get("键");
删除:m.delete("键");
清空:m.clear();
遍历:m.forEach(callback);