[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()
~~~