ES6 基础知识

431 阅读4分钟

ES6

箭头函数的特性有哪些

  1. 箭头函数是匿名函数,不是自己绑定的this,arguments,super,new,target
  2. 箭头函数没有this值,他会捕获其所在的上下文,作为自己的this值,用call和apply绑定时相当于传入参数对this没有影响
  3. 箭头函数没有arguments,如果必须使用的话可以用rest替代
  4. 箭头函数当方法使用的使用没有定义this绑定
  5. 箭头函数不能作为构造函数,所以不能使用new关键字
  6. 箭头函数没有原型属性
  7. 不能简单返回对象字面量

let和var区别

  1. let
    • 必须先声明后使用,可以重复赋值但是不可以重复声明
    • let产生块级作用域和暂时性死区
  2. var
    • 可以重复声明可以重复赋值
    • 会产生全局作用域和局部作用域
    • 有声明提升不会出现暂时性死区

实现数组去重

let arr = [1,2,3,4,1,2,3]
let newArr = arr.filter((val,idx)=>{
    return arr.indexOf(val) == idx; 
})
console.log(arr)

使用JSON方式实现深拷贝

let obj = {
    name:"mlc"
}
let newObj = JSON.stringify(obj);
let obj2 = JSON.parse(newObj);
console.log(obj2)

ES6模板字符串有哪些好处?

  1. 模板字符串省去的使用引号和加号拼接时的繁琐,提高了代码的可读性.降低了代码的出错率
  2. 除变量外的内容可以直接在反单引号内直接拼接,变量在${}内声明可以直接使用,方便快捷

对于对象扩展和属性名表达式写法

  1. 在ES6中属性和方法都进行了简写
    • 属性名如果和属性值相等的话可以简写
    • 方法的function关键字可以省略
  2. 例:
//属性名简写
let name = "chaochao";
let obj = {
    name,
    fn(){
        console.log(this)  
    }
}
//属性名表达式简写
let name = "chaochao";
obj[name] = "linger"

手写一个promise

let promise = new Promise((resolve,reject) =>{
    if(true){
        resolve("成功");
    }else{
        reject("失败");
    }
}).then((res) =>{
    console.log("处理成功的返回值");
}).catch((err)=>{
    console.log("处理失败的返回值");
})

class定义类

class类中成员有成员变量,成员方法 类有静态方法,静态变量

class Parent{
    static type = "动物"
    constructor(name){
        this.name = name;
    }
    static eat(){
        
    }
    hi(){
        
    }
}

class类 实现继承

class parent{
    
}
class Children extends Parent{
    constructor(name,age){
        super(name)//调用父类的构造方法
        this.age = age;
    }
}

谈一谈async和await的理解

  1. 他是promise的generator的语法糖
  2. 他接受一个promise对象,接收promise对象的resolve状态
  3. async必须声明在函数前面,await必须声明在函数内部,必须成对出现,否则没有效果
  4. 他一旦接收到promise的结果会将其放入一个序列,让他们去有序的去执行,必须上一个执行完毕后才会执行下一个
  5. reject的执行结果放在try..catch中处理

promise

  1. promise是异步编程的一种解决方案
  2. 他是用来解决异步回调问题,由于js是单线程的,很多异步操作都依靠于回调,各种回调的嵌套及其复杂,称为回调地狱
  3. Promise用来把这种复杂的处理方式做简化的
  4. 他有三种状态,pendding,fulfilled,rejected三个状态
  5. pendding表示程序正在执行中
  6. fulfilled表示程序从执行中执行成功,将由then来处理
  7. rejected表示程序从执行中执行失败,将由catch来处理
  8. promise一般配合async一起使用来处理异步编程

symbol类型

  1. ES6新增symbol类型用来生成一个独一无二的值
  2. 用来给对象属性赋值,让对象的属性具备唯一性,不会被覆盖

super有哪些用法

super分两种

  1. super对象
    • 一般使用在子类覆盖的父类方法中
  2. super方法
    • 只能出现在constructor中\

静态和成员的区别

  1. 静态
    • 静态是类的属性和方法
    • 全局独一份,不可以重复
  2. 成员
    • 成员的属性和方法是实例化对象的
    • 每一次实例化对象都会得到一份拷贝 对于一些通用的方法和属性可以考虑设置为静态

深拷贝的原理

深拷贝发生在对象身上,基本数据类型都存在于栈内存,赋值操作赋予的如果是实实在在的值那么,拷贝后的元素不会随着被拷贝的元素而改变,而对象这种引用类型他的栈内存中只存在的地址直接赋值拷贝的是地址,那么我们可以递归对象,只赋予实实在在的值,那么,拷贝元素的值不会随着被拷贝的值进行改变

set和map

set是一个不能有重复元素的集合,他不允许存在重复的数据,一般由于数组去重 map是一个跟对象相似的集合,而他和对象不同的是,他可以使用引用数据类型做key