es6面试题

97 阅读3分钟

es6新增的特性

  1. let,const关键字
  2. 箭头函数
  3. 模板字符串
  4. map,set
  5. 数组新增方法(Array.from(),includes(),map(),filter(),forEach(),find(),some(),every())
  6. 对象新增方法(Object.is()、Object.assign()、Object.keys()、Object.values()、Object.entries())
  7. 解构赋值
  8. class类
  9. moudule导入导出
  10. promise对象
  11. async/await异步函数(ES7)
  12. gennertor/yield

let,const,var对比

  1. let,const申明变量不存在变量提升
  2. let,const申明变量不允许重复
  3. let,const申明变量存在块级作用域,对比var不会污染外层变量
  4. let,var申明可不设初始值,const不需设置
  5. const申明变量不可改变,引用变量通过指针改变属性
  6. let,const引用之前变量名不能使用,又称为暂时性死区

箭头函数

  1. 箭头函数相比普通函数更简洁,可省略function和花括号,入(a,b)=>a+b
  2. 箭头函数没有自己的this,它会捕获其所在上下文的this值作为自己的this值,这个值在函数定义时就确定并固定了。因此,箭头函数的this不能通过call、apply、bind等方法改变。普通函数this的值是在函数被调用时确定的,它指向调用该函数的对象或全局。普通函数的this可以通过call、apply、bind等方法改变。‌
  3. 箭头函数在单一入参的情况下可以省略括号,在只有一条语句的情况下可以省略花括号,作为回调函数还可以省略return
  4. 箭头函数没有自己的arguments对象,但可以通过剩余参数(...args)或访问外层函数的arguments对象来间接访问参数。箭头函数不能创建自己的prototype属性,因此不能用作构造函数
  5. 箭头函数不能用作Generator函数,因为它没有yield关键字

模板字符串

let a = `我是一个模板字符串${str}str是变量`

map,set

map

  1. Map是一种键值对的集合,和对象不同的是,键可以是任意值
  2. Map可以便利,可以和各种数据格式转换
  3. Map中键值对是有序的
    let oneMap = new Map();
    oneMap.set("name", "狗蛋");
    oneMap.set("sex", "男or女");
    console.log(oneMap.get("name"));
    oneMap.delete("sex");
    console.log(oneMap.has("sex"));
    for (let item of oneMap) {
      console.log(item); //['name', '狗蛋'] ['age', '101']
    }
    oneMap.forEach((k, v) => {
      console.log(k); //为键值
    });
    oneMap.clear();
    console.log(oneMap);

set

  1. set是类似数组的一种的数据结构,类似数组的一种集合,但在Set中没有重复的值
    let oneSet = new Set();
    oneSet.add("狗蛋");
    oneSet.add("狗剩");
    oneSet.delete("狗子的");
    oneSet.has("狗子的");
    console.log(oneSet.size);
    oneSet.clear()

map与object的区别

  1. map的键名可以使任意数据类型,而object的键名只能是字符串或者Symbol
  2. map的键值对插入式有序的,而object是无序的
  3. map可以通过for-of遍历键值对,而object只能手动遍历键值对
  4. map没有继承关系,而object是所有对象的基类
  5. map直接通过size属性访问,object只能手动计算,通过Object.keys()方法或者通过for…in循环统计

set与Array的区别

  1. set数据不能重复,Array可以重复
  2. set无序结构,操作更快,array有序结构,操作更慢
  3. set没有下标概念,无法通过下标获取,array可以通过下标访问

数组新增方法

  1. Array.from()是 JavaScript 中的一个静态方法,用于将类数组对象或可迭代对象(比如 Set、Map 等)转换成一个新的数组
  console.log(Array.from("我是谁")); //['我', '是', '谁'] 将字符串转化为数组
  console.log(Array.from(new Set([1, 2, 3, 4]), item => item + 1)); //[2, 3, 4, 5] 将类数组转化
  1. includes(),map(),filter(),forEach(),find(),some(),every()

对象新增方法

  1. Object.is() 用于比较两值是否相等 Object.is(a,b) 返回true或者false
  2. Object.assign() 浅拷贝,对象合并等等
  3. Object.keys()、Object.values()
  4. Object.entries():console.log(Object.entries({ name: 1, sex: "男" })); //[['name', 1],['sex', '男']]

promise对象

  1. 三种状态 resolve, reject,peeding
  2. 两种结果then,catch
  let me = new Promise((resolve, reject) => {
    resolve("我成功了");
  });
  me.then(res => {
    console.log(res);
  });

async/await异步函数

await等待执行结果

  let me = new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("我成功了");
    }, 500);
  });
  let a = await me;
  console.log(a);
  console.log("1");
  // 1 我成功了