1. 程式人生 > >前端面試寶典之es6

前端面試寶典之es6

ES6的瞭解

新增模板字串(為JavaScript提供了簡單的字串插值功能)、箭頭函式(操作符左邊為輸入的引數,而右邊則是進行的操作以及返回的值Inputs=>outputs。)、for-of(用來遍歷資料—例如陣列中的值。)arguments物件可被不定引數和預設引數完美代替。ES6將promise物件納入規範,提供了原生的Promise物件。增加了let和const命令,用來宣告變數。增加了塊級作用域。let命令實際上就增加了塊級作用域。ES6規定,var命令和function命令宣告的全域性變數,屬於全域性物件的屬性;let命令、const命令、class命令宣告的全域性變數,不屬於全域性物件的屬性。。還有就是引入module模組的概念

說說你對Promise的理解

  • 依照 Promise/A+ 的定義,Promise 有四種狀態:

    • pending: 初始狀態, 非 fulfilled 或 rejected.

    • fulfilled: 成功的操作.

    • rejected: 失敗的操作.

    • settled: Promise已被fulfilled或rejected,且不是pending

  • 另外, fulfilled 與 rejected 一起合稱 settled

  • Promise 物件用來進行延遲(deferred) 和非同步(asynchronous ) 計算

Promise 的建構函式

  • 構造一個 Promise,最基本的用法如下:

 

var promise = new Promise(function(resolve, reject) {        if (...) {  // succeed            resolve(result);        } else {   // fails            reject(Error(errMessage));        }    });

  • Promise 例項擁有 then 方法(具有 then 方法的物件,通常被稱為thenable)。它的使用方法如下:

 

promise.then(onFulfilled, onRejected)

  • 接收兩個函式作為引數,一個在 fulfilled 的時候被呼叫,一個在rejected的時候被呼叫,接收引數就是 future,onFulfilled 對應 resolve, onRejected 對應 reject

什麼是 Promise ?

  • Promise 就是一個物件,用來表示並傳遞非同步操作的最終結果

  • Promise 最主要的互動方式:將回調函式傳入 then 方法來獲得最終結果或出錯原因

  • Promise 程式碼書寫上的表現:以“鏈式呼叫”代替回撥函式層層巢狀(回撥地獄)

談一談你瞭解ECMAScript6的新特性?

  • 塊級作用區域
    let a = 1;

  • 可定義常量
    const PI = 3.141592654;

  • 變數解構賦值
    var [a, b, c] = [1, 2, 3];

  • 字串的擴充套件(模板字串)
    var sum =${a + b};

  • 陣列的擴充套件(轉換陣列型別)
    Array.from($('li'));

  • 函式的擴充套件(擴充套件運算子)
    [1, 2].push(...[3, 4, 5]);

  • 物件的擴充套件(同值相等演算法)
    Object.is(NaN, NaN);

  • 新增資料型別(Symbol)
    let uid = Symbol('uid');

  • 新增資料結構(Map)
    let set = new Set([1, 2, 2, 3]);

  • for...of迴圈
    for(let val of arr){};

  • Promise物件
    var promise = new Promise(func);

  • Generator函式
    function* foo(x){yield x; return x*x;}

  • 引入Class(類)
    class Foo {}

  • 引入模組體系
    export default func;

  • 引入async函式[ES7]

 

async function asyncPrint(value, ms) {      await timeout(ms);      console.log(value)     }

Object.is() 與原來的比較操作符 ===、== 的區別?

  • == 相等運算子,比較時會自動進行資料型別轉換

  • === 嚴格相等運算子,比較時不進行隱式型別轉換

  • Object.is 同值相等演算法,在 === 基礎上對 0 和 NaN 特別處理

 

+0 === -0 //true NaN === NaN // false Object.is(+0, -0) // false Object.is(NaN, NaN) // true

什麼是 Babel ?

  • Babel 是一個 JS 編譯器,自帶一組 ES6 語法轉化器,用於轉化 JS 程式碼。 這些轉化器讓開發者提前使用最新的 JS語法(ES6/ES7),而不用等瀏覽器全部相容。

  • Babel 預設只轉換新的 JS 句法(syntax),而不轉換新的API。