ES8已經正式發佈了,其新特性有:字符串填充、異步函數與共享內存與原子操做等。本文對着三個特性進行深刻的解析。固然還有其餘的一些特性。ajax
1.字符串填充npm
ES8中爲字符串添加了新的內置函數padStart()、padEnd(),主要用於固定字符串的長度而且用指定的字符進行填充,以padStart爲例,其例子以下:json
1 var sourceStr="example", 2 targetLen=5, 3 padStr="foobar"; 4 sourceStr.padStart(targetLen,padStr)//若是原字符長度大於targetLen,則返回原字符; 5 targetLen=10, 6 sourceStr.padStart(targetLen,padStr)//"fooexample";若是沒有padStr,則用""填充
其做用與npm包left-pad類似,left-pad實現與調用方式以下:併發
1 //實現方式 2 'use strict'; 3 4 module.exports = function (str, len, ch) { 5 str = str + ''; 6 len = len - str.length; 7 if (len <= 0) return str; 8 9 if (!ch && ch !== 0) ch = ' '; 10 ch = ch + ''; 11 12 while (len--) { 13 str = ch + str; 14 } 15 16 return str; 17 } 18 //調用方式 19 const leftPad = require('left-pad') 20 leftPad(1, 2, '0')//"01"
與padStart不一樣的是其padStart只能爲單個字符。padStart、padEnd的出現爲格式化日期帶來了便利,不再用判斷d<10。異步
2. 異步函數async
Javascript中按順序執行異步邏輯的時候,經常會把後續的邏輯過程封裝在回調函數中做爲起始函數的參數,逐層嵌套。其中的後續邏輯就是稱之爲的「回調」。函數
最多見的一個回調就是ajax拉取數據口進行的其餘操做,以下:ui
1 // 獲取產品數據 2 ajax('products.json', (products) => { 3 console.log('AJAX/products >>>', JSON.parse(products)); 4 // 獲取用戶數據 5 ajax('users.json', (users) => { 6 console.log('AJAX/users >>>', JSON.parse(users)); 7 // 獲取評論數據 8 ajax('products.json', (comments) => { 9 console.log('AJAX/comments >>>', JSON.parse(comments)); 10 }); 11 }); 12 });
ES8將async/await合法話,可使用async/await來定義和執行異步函數。解決了傳統實現方式的callback hell。url
1 // 封裝 Ajax,返回一個 Promise 2 function requestP(url) { 3 return new Promise(function(resolve, reject) { 4 ajax(url, (response) => { 5 resolve(JSON.parse(response)); 6 }); 7 }); 8 } 9 (async() => { 10 // 獲取產品數據 11 let data = await requestP('products.json'); 12 // 獲取用戶數據 13 let users = await requestP('users.json'); 14 // 獲取評論數據 15 let products = await requestP('comments.json'); 16 console.log('ES7 Async/products >>>', products); 17 console.log('ES7 Async/users >>>', users); 18 console.log('ES7 Async/comments >>>', comments); 19 }());
3. 共享內存與原子操做spa
共享內存容許多個線程併發的讀寫數據,若是不加以控制的話會出現運行結果的錯誤,而原子操做可以進行併發控制,確保各個線程能夠按照預約的順序執行。
備註:本文章中有些示例來自網上,若有侵權,請聯繫我,我將進行刪除O(∩_∩)O~