[toc]
# 题1、请说出 ES6 中有哪些新特性?
答:let、const、箭头函数、map 和 set、模块化、面向对象编程(class)、promise、async...await、... 展开运算符、数组操作、字符串操作等。
# 题2、什么是 Map?
答:一种键值对存储的数据结构。
# 题3、Map 和 对象 有什么区别?
答:对象只能用字符串做为键,而 Map 可以使用任意类型来当成键。
代码演示:
~~~
// 键是字符串
let people = {
'name': 'tom',
'age': 10,
'12': 'hello'
}
// 任意类型做为键
let m = new Map()
m.set( 'name', 'tom' )
m.set( {age:10}, 100 ) // 用对象做为键
m.get( {age:10 }) // 100
~~~
# 题4、什么是 Set?
答:为 JS 中添加了一种新的数据类型:集合。
集合的特点:1. 能保存多个数据 2. 集合中的值不以重复
# 题5、什么是箭头函数?和普通函数有什么区别?
答:箭头函数是 ES6 中新出的一种定义函数的方法,这种方法在定义函数时使用 => 而不是 function 所以叫做箭头函数。
箭头函数和普通函数的区别是:函数中的 this 的指向不同:
箭头函数:箭头函数中是没有 this 的,它的 this 是在定义函数时从父元素中继承过来的。(定义时绑定 this)
普通函数:this 代表调用这个函数时所在的对象。(运行时才绑定 this)
# 题6、let 、 var 和 const 的用途和区别?
答:const 是用来定义常量的(值一旦定义了就不可以改变的量)。
let 和 var 是定义变量的。
let 和 var 的区别:
1. let 可以定义全局变量、局部变量和块级变量,而 var 能定义全局变量和局部变量。
2. let 不允许重复定义同名变量(报错),而 var 可以重复定义同名的变量(覆盖)。
3. let 不允许变量提升(先定义变量,然后再使用),而 var 允许变量提升(先使用,后定义)
# 题7、JS 中有几种实现模块化的思路?
答:JS 中的模块化有三种实现思路:
1. node 中的模块化技术(require 来引入,module.export 来导出)
2. ES6 中的模块化技术(import..from..来引入,export default 来导出)
3. 传统的模块化:CMD/AMD
# 题8、前端使用哪种模块化?后端使用哪种模块化?
答: 前端(Vue、React)使用 ES6 的模块化语法。(import....from)
后端(Node)使用 node 中的模块化语法。(require)
# 题9、ES6 中的模块化是怎么使用的?
答:import ... from 用来导入, export default 用来导出。
因为模块化实现的方案太多,比较乱,所以 ES6 提供了模块化希望能够统一模块化技术。但目前还没有完全统一。
注意:ES6 目前需要配合 Babel + Webpack 打包才能使用,否则默认都不支持。
代码演示一:一个一个导出
~~~
a.js
export function hello() {
}
export const name = 'tom'
main.js
import {hello, name} from './a.js'
hello()
~~~
代码演示二:一次导出所有
~~~
a.js
function hello() {
}
const name = 'tom'
export default {
hello,
name
}
main.js
import {hello, name} from './a.js'
hello()
~~~