1. 說出至少5個ES6的新特性,並簡述它們的作用。
1).let
關鍵字,用於聲明只在塊級作用域起作用的變量
2).const
關鍵字,用於聲明一個常量
3).解構賦值
,一種新的變量賦值方式。常用來交換變量值,提取函數返回值,設置默認值等
4).for-of遍歷
,可用來遍歷具有Iterator接口的數據結構(Array,String,Set,Map,arguments,NodeList等)
5).Set結構
,存儲不重複的成員的集合
6).Map結構
,鍵名可以是任何類型的鍵值對集合
7).Promise對象
,更合理、規範地處理異步操作。
8).Class類
,定義類和更簡便地實現類的繼承。
2. 使用結構賦值,實現兩個變量的值的交換(編程題)。
let a = 1;
let b = 2;
[a,b] = [b,a]
3. 使用解構賦值,完成函數的參數默認值(編程題)。
let test = (name='tom')=>{
console.log(name);
}
test();//tom
4. 利用數組推導,計算出數組 [1,2,3,4] 每一個元素的平方並組成新的數組。(編程題)
let arr = [1,2,3,4];
var arr2 = [];
for(let i of arr){
arr2.push(i*i);
}
console.log(arr2);//[1,4,9,16]
5. 使用模板字符串改寫下面的代碼。(ES5 to ES6改寫題)
let iam = "我是";let name = "tom";let str = "大家好,"+iam+name+",多指教。";
改:
let iam = "我是"; let name = "tom"; let str = `大家好,${iam+name},多指教`;
6. 用對象的簡潔表示法改寫下面的代碼。(ES5 to ES6改寫題)
let name = "tom";
let obj = {
"name":name,
"say":function(){
alert('hello world');
}
};
改:
let name = "tom";
let obj = {
name,
say(){
alert('hello world');
}
}
7. 用箭頭函數的形式改寫下面的代碼。(ES5 to ES6改寫題)
arr.forEach(function (v,i) { console.log(i); console.log(v);});
改:
arr.forEach((v,i)=>{
console.log(i);
console.log(v);
})
8. 閱讀下面的代碼,並用for…of改成它。(ES5 to ES6改寫題)
let arr = [11,22,33,44,55];
let sum = 0;
for(let i=0;i<arr.length;i++){
sum += arr[i];
}
改:
let arr = [11,22,33,44,55];
let sum = 0;
for(let i of arr){
sum+=i;
}
9. 關於Set結構,閱讀下面的代碼,回答問題。(代碼閱讀題)。
let s = new Set();
s.add([1]);
s.add([1]);
console.log(s.size);
問:打印出來的size的值是多少?
答:2,兩個[1]定義的是兩個不同的數組,在內存中的存儲地址不同,所以是不同的值
10. 關於Map結構,閱讀下面的代碼,回答問題。(代碼閱讀題)
let map = new Map();
map.set([1],"ES6系列");
let con = map.get([1]);
console.log(con);
問:打印出來的變量con的值是多少,爲什麼?
答:undefined。因爲set的時候用的數組[1]和get的時候用的數組[1]是分別兩個不同的數組,只不過它們元素都是1。它們是分別定義的兩個數組,並不是同一個值。
如果想達到預期的效果,你要保證get的時候和set的時候用同一個數組。比如:
let map = new Map();
let arr = [1];
map.set(arr,"ES6系列");
let con = map.get(arr);
console.log(con); //ES6系列
11. 定義一個類Animal,通過傳參初始化它的類型,如:“貓科類”。
它有一個實例方法:run,run函數體內容可自行定義。
class Animal{
constructor(type){
this.type=type;
}
run(){
console.log('I can run');
}
}
12. 基於第12題的Animal類,定義一個子類Cat並繼承Animal類。
初始化Cat類的暱稱name和年齡age。並擁有實例方法eat,eat函數體內容可自行定義。
class Cat extends Animal{
constructor(type,name,age){
super(type);
this.name=name;
this.age=age;
}
eat(){
console.log('eat');
}
}
13. 利用module模塊,實現兩個模塊A和B,A模塊導出變量name,age和say方法。
B模塊只導入變量name和say方法,並且重命名name爲nickname。
A模塊:
let name = 'tom';
let age = ()=>{
console.log('age');
}
let say = ()=>{
console.log('say');
}
export {name,age,say};
B模塊:
import {name as nickname,say} from 'A';