[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 代表調用這個函數時所在的對象。
# 題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()
~~~