1、新增了let const关键字
- let var const的区别
- let 是代码块有效 var是全局有效
- let 是不能重复声明的 var是可以多次声明
- let不存在变量的提升 var存在变量的提升
- const存储简单数据类型存储的是常量
2、新增的解构赋值
解构赋值针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。
let [a,b]=[1,2]
let {user}={user:“xiaosi”}
3、新增了箭头函数
箭头函数和普通函数的区别
- 普通函数存在着变量的提升,箭头函数没有
- 普通函数的this指向,谁调用指向谁,箭头函数是在哪定义就指向谁
- 普通函数可以当成构造函数,而箭头函数是不可以的
- 箭头函数没有arguments,要接受所有的参数用...rest
4、js的数据类型
- 简单数据类型
Number 、 String 、 Boolean 、 null 、undefined 、Symbol
- 引用数据类型
Object Array Function Date RegExp
5、数据类型判断 (得准确的知道每一种数据类型判断缺点)
- typeof 能判断基本的数据类型,返回基本数据类型小写字符串形式 除了null,用typeof判断null 返回Object
- instanceof 可以判断引用数据类型 正常的判断A是B的实例是没有问题的,但是所有引用数据类型的对象用instanceof判断都是Object的实例
- constructor 构造函数可以判断除了undefined 和null之外的任何数据类型,页解决了instanceof的问题
- 最完美的解决方案 Object.prototype.toString.call()返回的是[ Object 数据类型]
6、es6新增了模块化
根据功能封装模块 通过import导入 然后通过export导出
可以使用 export 导出也可以使用export default导出
我们使用import 来导入
export 和 export defualt的区别
- export 可以导出多个属性或者方法 ,需要用{}括起来 在用import接受的时候也得用{}接受
- 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关键字实现继承。
需要录制的面试题:
- js的数据类型
- js的数据类型判断
- 箭头函数与普通函数的区别
- let const var的区别
- promise
9、es6新增哪些特性?
- es6新增了promise(标题) 需要说什么是promise
- es6新增了模块化 需要说什么是模块化
- 新增了class关键字 需要解释
- 新增了箭头函数 再说箭头函数与普通函数的区别
- 新增了解构赋值 需要解释什么是解构赋值
- 新增了let const关键字 需要说let const var的区别
- 新增了简单数据类型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、如何实现响应式布局
响应式布局可以让网站同时适配不同分辨率和不同的手机端,让客户有更好的体验
响应式布局实现的方案:
- 百分比布局
- 媒体查询
- rem布局
- vw vh布局
- flex弹性盒布局
17、$route和$router的区别
$route是一个跳转的路由对象,每一个路由都会有一个$route对象,是一个局部的对象,可以获取对应的name,path,params,query等
$router是VueRouter的一个对象,通过Vue.use(VueRouter)和Vue构造函数得到一个router的实例对象,这个对象中是一个全局的对象,他包含了所有的路由,包含了许多关键的对象和属性。
18、params和query传参的区别
- params传值的参数是路由的一部分,所以调转必须加参数值才能调转 query传参和路由配置没有关系
- 获取方式是不一样的 query this.$route.query.参数名 params是 this.$route.params.参数名
19、mpa和spa的区别
mpa 多页面应用
一套系统有多个页面组成,页面之间的切换是由a标签的herf属性和script的location.href来实现的
spa是单页面应用
一套系统就由一个页面来承载,数据的切换是由路由来实现
mpa与spa的优缺点:
- 对于切换来说,路由的切换肯定比页面的切换更顺畅 所以spa的切换会好
- spa的首屏加载慢,mpa的首屏加载快