1、新增了let const关键字

  1. let var const的区别

2、新增的解构赋值

解构赋值针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。

let [a,b]=[1,2]

let {user}={user:“xiaosi”}

3、新增了箭头函数

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

  1. 普通函数存在着变量的提升,箭头函数没有
  1. 普通函数的this指向,谁调用指向谁,箭头函数是在哪定义就指向谁
  1. 普通函数可以当成构造函数,而箭头函数是不可以的
  1. 箭头函数没有arguments,要接受所有的参数用...rest

4、js的数据类型

  1. 简单数据类型

Number 、 String 、 Boolean 、 null 、undefined 、Symbol 

  1. 引用数据类型

Object Array Function Date RegExp

5、数据类型判断 (得准确的知道每一种数据类型判断缺点)

  1. typeof 能判断基本的数据类型,返回基本数据类型小写字符串形式 除了null,用typeof判断null 返回Object
  1. instanceof 可以判断引用数据类型 正常的判断A是B的实例是没有问题的,但是所有引用数据类型的对象用instanceof判断都是Object的实例
  1. constructor 构造函数可以判断除了undefined 和null之外的任何数据类型,页解决了instanceof的问题
  1. 最完美的解决方案 Object.prototype.toString.call()返回的是[ Object 数据类型]

6、es6新增了模块化

根据功能封装模块 通过import导入 然后通过export导出

可以使用 export 导出也可以使用export default导出

我们使用import 来导入

export 和 export defualt的区别

  1. export 可以导出多个属性或者方法 ,需要用{}括起来 在用import接受的时候也得用{}接受
  1. export default是以整体的方式抛出,接受的时候只接一个

7、promise

promise是es6处理异步的一种方式,它的本质是一个对象,promise的参数是一个回调,回调有连个参数 resolve 成功回调 reject 失败回调。它有三种状态分别为 初始状态pending 已完成fulfilled 已失败rejected。状态改变只有两种结果 完成或者失败。

promise处理错误的方式有两种 第一种在then中传递两个回调 第二个回调是错误回调

第二种方式是通过catch方式来实现

promise常用的api有 then ()处理回调函数 catch()捕获异常 还有两个常用的静态方法

Promise.all()一块处理多个promise请求,所有的请求都成功才成功。

Promise.race()一块处理多个promise请求,有一个成功就成功

es7中可以使用async实现异步处理,还有一个关键字await可以实现异步函数同步化

8、新增类class关键字

class关键字是es5构造函数+原型模式创建对象的语法糖。创建类的方式 class 类名{构造函数和方法} 通过extends关键字实现继承。

需要录制的面试题:

  1. js的数据类型
  1. js的数据类型判断
  1. 箭头函数与普通函数的区别
  1. let const var的区别
  1. promise

9、es6新增哪些特性?

  1. es6新增了promise(标题) 需要说什么是promise
  1. es6新增了模块化 需要说什么是模块化
  1. 新增了class关键字 需要解释
  1. 新增了箭头函数 再说箭头函数与普通函数的区别
  1. 新增了解构赋值 需要解释什么是解构赋值
  1. 新增了let const关键字 需要说let const var的区别
  1. 新增了简单数据类型symbol

10、作用域与作用域链

作用域:就是变量的使用范围。js中作用域分为全局和局部

js的作用域分为全局作用域和局部作用域。在全局作用域中是不能访问局部作用域中的数据。在局部作用域中访问变量如果当前作用域中有可以直接访问,如果没有那么向上级作用域中访问,如果上级作用域也没有就继续向上找,知道找到全局window作用域,如果window作用域也没有返回undefined,整个作用域的访问形成了一个作用域链

11、说一下闭包

概念

闭包是指有权访问另外一个函数作用域中的变量的函数。可以理解为(能够读取另一个函数作用域的变量的函数)

特性

1:函数套函数

2:内部函数可以直接访问外部函数的内部变量或参数

3:变量或参数不会被垃圾回收机制回收

定义

Plain Text

<script> //第一种定义方式 function  outer(){ var num=10; function inner(){ return num+=10 } return inner() } //调用 console.log(outer()) //第二种定义方式 function  out(){ var num=10; return inner=function(){ return num+=10 } } //调用 console.log(out()())</script>

优缺点

优点:

1:变量长期驻扎在内存中

2:避免全局变量的污染

3:私有成员的存在

缺点:

常驻内存 增大内存的使用量 使用不当会造成内存的泄露.

12、原型与原型链

原型:每一个对象都有一个prototype属性可以挂载要扩展的属性和方法,在prototype上挂载的属性和方法在这个对象的任何实例上都可以调用。

当一个对象调用自身不存在的属性/方法时,就会去prototype关联的父类对象上去找,如果找不到继续去父类关联的对象上去找,直到找到Object的属性和方法,找到直到调用,找不到返回undefined

13、对象的浅拷贝与深拷贝

由于引用数据类型的数据是存储在堆空间中,在栈空间中存储的是是数据的引用地址。

对象的浅拷贝就是将栈空间中的地址复制一份,两个地址指向的同一个数据

浅拷贝可以使用Object.assign()来实现 深拷贝可以使用JSON.stringify()先转换为json的串复制,然后再通过JSON.parse()转换回来

14、说一下js的事件机制

js中存在两种事件机制,一个是ie提出的冒泡事件机制 还有一个是网景提出的捕获型事件机制

冒泡事件机制是先触发事件的的直接元素,然后向外扩散就像冒泡一样。捕获型就是事件从外向里执行。js中的事件监听addEventListener的第三个参数默认的为false 是冒泡 为true是捕获

我们可以通过event.stopPropagation()来实现

15、rem布局的原理

1rem的大小就是根元素<html>的font-size的值,通过设置 根元素<html>的font-size的大小,来控制整个html文档内的字体大小、元素宽高、内外边距等

16、如何实现响应式布局

响应式布局可以让网站同时适配不同分辨率和不同的手机端,让客户有更好的体验

响应式布局实现的方案:

  1. 百分比布局
  1. 媒体查询
  1. rem布局
  1. vw vh布局
  1. flex弹性盒布局

17、$route和$router的区别

$route是一个跳转的路由对象,每一个路由都会有一个$route对象,是一个局部的对象,可以获取对应的name,path,params,query等

$router是VueRouter的一个对象,通过Vue.use(VueRouter)和Vue构造函数得到一个router的实例对象,这个对象中是一个全局的对象,他包含了所有的路由,包含了许多关键的对象和属性。

18、params和query传参的区别

  1. params传值的参数是路由的一部分,所以调转必须加参数值才能调转 query传参和路由配置没有关系
  1. 获取方式是不一样的 query this.$route.query.参数名 params是 this.$route.params.参数名

19、mpa和spa的区别

mpa 多页面应用

一套系统有多个页面组成,页面之间的切换是由a标签的herf属性和script的location.href来实现的

spa是单页面应用

一套系统就由一个页面来承载,数据的切换是由路由来实现

mpa与spa的优缺点: