ES6

var、let、const

var

 

 const(对于普通类型不可改变值,引用类型不可改变栈里的地址)

 

 let

let没有声明提升,声明可以不赋值,暂时性死区,块级作用域,不能重复赋值

继承

父类可以派生出子类,子类具备父类的属性和方法,子类也可以添加自己的属性和方法。通过关键字class 子类 extends 父类 和 super来实现继承

原型、原型链、原型对象

原型对象:类的一个属性,prototype, 用来存储所有实例对象共享的属性和方法。

原型:每一个实例化对象创建的时候,除了开辟属性空间,还会创建一个_proto_属性,这个属性指向该类的原型对象,所以实例化对象就可以访问原型对象上的属性和方法。

原型链:如果一个实例化对象想要找到某个属性/方法,先在自身身上找该属性和方法,如果找不到就是该类的原型对象上找(由于该类的原型对象也是一个对象,所以也会有_proto_属性),如果还找不到,就会去原型的原型上找,这样形成一个链式结构,把这个链式结构成为原型链。

检查一个属性/方法是不是自身的,可以通过  实例化对象.hasOwnProperty('属性名/方法名') 为true就存在,false就是在该类的原型对象上。

深浅拷贝

对于引用类型(对象,数组)

 

 

 

 对象浅拷贝的解决方法

法一:

缺点:当数据类型为function/数据值为undefined,无法进行拷贝

 

 

 

 

     改变

 

 

 

 法二:

缺点:只能深拷贝一级属性,引用类型就是浅拷贝

 

 

法三:

缺点(同assign()):只能深拷贝一级属性,引用类型就是浅拷贝

 

 

 

 

 法四:

递归(完美的解决方法)

数组浅拷贝的解决方法

法一:

缺点:当数据类型为function/数据值为undefined,无法进行拷贝

 

 法二、三同上:

缺点:只能深拷贝一级属性,引用类型就是浅拷贝

 

 

 法四:

slice(截取数组区间)、concat(拼接)
缺点:只能深拷贝一级属性,引用类型就是浅拷贝

 

 

法五:
递归(完美的解决方法)

解构赋值

 

 ---------------------------------------------------------------------

 

 Promise

promise有三个状态,pending(new promise被创建),fufiled(执行resolve函数),rejected(执行reject函数)  ---------(pending->fufiled,pending->rejected,但fufiled,rejected不能相互转换,并且promise不受外界影响一旦状态改变,就不会在变)

-------------------------------------------------------------------------

不管是.then还是.catch都是从pending状态->fulfiled状态

 

 

 只有抛出异常才会从pending->rejected

 

-----------------------------------------------------------------------------

 方法

promise.all(参数是一个数组,数组的值是promise对象,只有都成功了,才会一起返回,走.then,如果有一个出错,就会走.catch)

 

 

promise.allSettled

用于多个promise实例,不管成功还是失败,只要promise的状态确定了,就一起返回

 

 

promise.any 谁先成功返回谁

promise.race 不管成功与失败,当其中一个先执行完毕,就先返回谁

------------------------------------------------------------------------------

 -----------------------------------------------------------------

 新增方法includes

includes() 方法用于判断字符串是否包含指定的子字符串,或者判断数组中是否有指定的元素。例如:[‘hellow’,‘world’].includes(‘hellow’) ,如果数组存在指定元素就会返回true,没有就返回false。

新增方法sort

sort是根据unicode排序的,先将数字转成字符串,再根据unicode(先数字0-9,在大写字母A-Z,在小写字母a-z,在汉字)
应用

 

新增方法 filter

 

方法 forEach(ES3)

 

 新增方法 map

新增方法reduce

有初始值,pre、index从初始值开始,没有初始值,pre从第一个值开始,index从1开始(和数组其他方法比较最大的不同把当前项和上一次计算的结果作比较

有初始值

无初始值

 

 reduce的用法

用法一:
对数组求和(有初始值和没有都行)

 

 用法二:
求出数组中的最大值

 

 用法三:

去重

 

 用法四:

将二维数组变成一维数组

 

 三维数组变成一维数组

闭包---Closure

 

 

 

 -----------------------------------------------------------------------------------------

闭包的两种形式(第一种方式可以在函数外部使用函数内部的局部变量,但不能改变局部变量,实现了数据的私有,并且使得局部变量变成全局变量,局部变量不会被销毁

 

 

 

 闭包的应用:统计函数的调用次数,每调用一次就自加1

instanceof 和 typeof

instanceof 判断数组和对象的数据类型,如果为数组就是true, 如果是不是数组就是false

instanceof 原理:原型链  (也就是说在对象的原型上能找到类的prototype,那么返回值就是true,否则返回false)

 箭头函数

箭头函数与普通函数的区别

1.外形不同

2.箭头函数都是匿名函数,普通函数既可以是匿名函数,也可以 是有名函数

3.箭头函数中的this指向的是最近的外层作用域this所指的对象,普通函数中的this指向调用该方法的对象,构造函数中的this指向new出来的对象。

4.箭头函数中没有arguments 对象,普通函数有arguments对象,保存所有实参的伪数组(arguments不能调用数组相关API)。

5.箭头函数没有prototype原型对象,普通函数有prototype,保存所有实例对象共享的属性和方法。

 防抖、节流

防抖:

 节流:

 

 

 

posted on 2022-11-06 11:37  前端小白白。  阅读(27)  评论(0)    收藏  举报

导航