前端面試寶典之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。