ES6面試題總結(2018-06-22)

tony0087發表於2021-09-09
1.說出至少5個ES6的新特性,並簡述它們的作用。(簡答題)

答:
     1、let關鍵字,用於宣告只在塊級作用域起作用的變數。
     2、const關鍵字,用於宣告一個常量。
     3、結構賦值,一種新的變數賦值方式。常用於交換變數值,提取函式返回值,設定預設值。
     4、Symbol資料型別,定義一個獨一無二的值。
     5、Proxy代理,用於編寫處理函式,來攔截目標物件的操作。
     6、for...of遍歷,可遍歷具有iterator 介面的資料結構。
     7、Set結構,儲存不重複的成員值的集合。
     8、Map結構,鍵名可以是任何型別的鍵值對集合。
     9、Promise物件,更合理、規範地處理非同步操作。
     10、Class類定義類和更簡便地實現類的繼承。
     ...

2.使用結構賦值,實現兩個變數的值的交換(程式設計題)。

答:

let a = 1;let b = 2;
[a,b] = [b,a];
3.使用結構賦值,完成函式的引數預設值(程式設計題)。
function demo({name="王德發"}){     console.log(name);
}
4.利用陣列推導,計算出陣列 [1,2,3,4] 每一個元素的平方並組成新的陣列。(程式設計題)
var arr1 = [1, 2, 3, 4];var arr2 = [for (i of arr1) i * i];console.log(arr2);
5.使用模板字串改寫下面的程式碼。(ES5 to ES6改寫題)
let iam  = "我是";let name = "王德發";let str  = "大家好,"+iam+name+",多指教。";

改:

let iam  = `我是`;let name = `王德發`;let str  = `大家好,${iam+name},多指教。`;
6.用物件的簡潔表示法改寫下面的程式碼。(ES5 to ES6改寫題)
let name = "王德發";let obj = {    "name":name,    "say":function(){
        alert('hello world');
    }
};

改:

let name = "王德發";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.設計一個物件,鍵名的型別至少包含一個symbol型別,並且實現遍歷所有key。(程式設計題)

答:

let name = Symbol('name');let product = {
    [name]:"洗衣機",    "price":799};Reflect.ownKeys(product);
9.有一本書的屬性為:{“name”:“《ES6基礎系列》”, ”price”:56 };要求使用Proxy物件對其進行攔截處理,name屬性對外為“《ES6入門到懵逼》”,price屬性為只讀。(練習題)

答:

let book  = {"name":"《ES6基礎系列》","price":56 };let proxy = new Proxy(book,{    get:function(target,property){        if(property === "name"){            return "《入門到懵逼》";
        }else{            return target[property];
        }
    },    set:function(target,property,value){        if(property === 'price'){
            target[property] = 56;
        }
    }
});
10.閱讀下面的程式碼,並用for...of改成它。(ES5 to ES6改寫題)
let arr = [11,22,33,44,55];let sum = 0;for(let i=0;i

改:

let arr = [11,22,33,44,55];let sum = 0;for(value of arr){
    sum += value;
}
11.關於Set結構,閱讀下面的程式碼,回答問題。(程式碼閱讀題)。
let s = new Set();
s.add([1]);
s.add([1]);console.log(s.size);

問:列印出來的size的值是多少?
答:2。如果回答為1的,多必是記得Set結構是不會儲存相同的值。其實在這個案例中,兩個陣列[1]並不是同一個值,它們分別定義的陣列,在記憶體中分別對應著不同的儲存地址,因此並不是相同的值。所以都能儲存到Set結構中,size為2。

12.關於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系列
13.定義一個類Animal,透過傳參初始化它的型別,如:“貓科類”。它有一個例項方法:run,run函式體內容可自行定義。

答案:

class Animal {    constructor(type){        this.type = type;
    }

    run(){
        alert('I can run');
    }
}
14.基於第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(){
        alert('I am eating');
    }
}
15.利用module模組,實現兩個模組A和B,A模組匯出變數name,age和say方法。B模組只匯入變數name和say方法,並且重新命名name為nickname。
//-----模組A-------//var name = "kitty";var age = 15;var say = function(){    //....



作者:a小磊_
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1747/viewspace-2813600/,如需轉載,請註明出處,否則將追究法律責任。

相關文章