91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ES6中的使用技巧

發布時間:2021-07-09 14:30:24 來源:億速云 閱讀:131 作者:小新 欄目:web開發

這篇文章主要為大家展示了“ES6中的使用技巧”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“ES6中的使用技巧”這篇文章吧。

一、變量解構賦值的用途

1)交換變量的值

let x = 1;
let y = 2;
[x, y] = [y, x]

2)從函數返回多個值

// 返回一個數組
function example(){
  return [1, 2, 4];
}
let [a, b, c] = example() 
// 返回一個對象
function example(){
  return {
    foo:1,
    bar: 2
  }
}
let {foo, bar} = example(); 或者 ( {foo, bar} = example() )

3)提取JSON數據

let jsonData = {
 id:42,
 status: "OK",
 data: [867, 5309]
};
let { id, status, data: number} = jsonData;

4)輸入模塊的指定方法

加載模塊時,往往需要指定輸入的方法,解構賦值使得輸入語句非常清晰

const { SourceMapConsumer, SourceNode } = require("source-map")

5) 數組復制的功能

在es5中,開發者經常使用 concat() 方法克隆數組:

// 在 es5 中克隆數組
var colors = [ 'red', 'green', 'blue' ];
var clonedColors = colors.concat();
console.log(clonedColors); // "[red, green, blue]"

concat() 方法的設計初衷是連接兩個數組,如果調用時不傳遞參數就會返回當前數組的副本。在es6中可以通過不定元素的語法來實現相同的目標:

let colors = [ 'red', 'green', 'blue' ]
let [ ...clonedColors ] = colors;
console.log(clonedColors); // "[red, green, blue]"

6) 結合Set集合,創建一個無重復元素的數組

function eliminateDuplicates(items) {
  return [...new Set(items)]
}
let numbers = [1, 2, 3, 3, 3, 4, 5];
let noDuplicates = eliminateDuplicates(numbers );
console.log(noDuplicates ); // [1,2,3,4,5]

7) 使用apply 把兩個數據合并成一個

var arra1 = [{
 name: '小智',
 age: 26
}]
var arra2 = [{
 name: '大智',
 age: 27
}]
arra1.push.apply(arra1, arra2)
console.log(arra1)

二、函數的用處(常見就不多說了)

1)創建立即執行函數表達式

// es5
let person = function(name) {
 return {
  getName: function() {
   return name;
  }
 }
}('小智');
console.log(person.getName()); // 小智

在這段代碼中,立即執行函數表達式創建了一個包含getName() 方法的新對象,將參數 name 作為該對象的一個私有成員返回給函數的調用者。

只要箭頭函數包裹在小括號里,就可以用它實現相同的功能

// es6
let person = ((name) => {
 return {
  getName: function() {
   return name;
  }
 }
})('小智2');
console.log(person.getName()); //小智

2.利用參數默認值可以指定某一個參數不得省略,如果省略就拋出一個錯誤。

function throwEmptyError() {
  throw new Error('參數不能為空');
}
function foo(mustBeParams = throwEmptyError() ){
  return mustBeParams();
}
foo() // 參數不能為空

三、擴展對象的功能性讓代碼更加簡潔

1) 可計算屬性名

在es6中,使用方括號可以計算屬性名稱,如

let lastName ='last name';
let person = {
  "first name": 'Nicholas',
  [lastName]: 'Zakas'
}
console.log(person['first name']); // "Nicholas"
console.log(person[lastName]); // Zakas

2) 利用 Object.assign()合并兩個對象

function request(options) {
 let defaultOptions = {
  port: 8000,
  type: 'get'
 }
 Object.assign(options,defaultOptions);
 console.log(options)
}
request({url: 'http://www.baidu.com'})

四、結合es6簡潔函數寫法,高階函數的應用

1) tab 函數

// 此處tap函數接受一個 vaule 并返回一個包含value 閉包函數,該函數被執行
const tap = (value) => (fn) => (
 typeof(fn) === 'function' && fn(value),
 console.log(value)
)

tab函數用處:假設你在遍歷一個來自服務器的數組,并發現數據錯了,因此你想調試一下,看看數組包含了什么,就可以用 tab函數

[1, 2 ,3, 4].forEach((a) => {
 tap(a)((a)=> {
  console.log(a)
 })
});
#### 2) once 函數

在很多情況下,我們只需要運行一次給定的函數,發起一次銀行支付請求等,這時就可以用到 once 函數。

const once = (fn) => {
  let done = false;
  return function () {
    return done?undefined:((done=true),fn.apply(this,arguments))
  }
}
const doPayment = once(()=>{
 console.log('payment is done')
})
doPayment(); // payment is done
console.log(doPayment()); //undefined
#### 3) 函數柯里化的應用

開發者編寫代碼的時候應用的不同階級編寫很多日志,我們可以編寫一個如下的日志函數:

const loggerHelper = (mode, initialMessage, errorMessage, lineNo) => {
 if (mode === 'DEBUG') {
  console.debug(initialMessage,errorMessage + 'at line:' + lineNo)
 }
 else if (mode === 'ERROR') {
  console.error(initialMessage,errorMessage + 'at line:' + lineNo)
 }
 else if (mode === 'WARN') {
  console.warn(initialMessage,errorMessage + 'at line:' + lineNo)
 }
 else
  throw "Wrong mode"
}

當開發者需要向控制臺打印Stats.js文件中的錯誤時,可以用如下方式:

loggerHelper("ERROR", "ERROR At Stats.js", "Invalid argument passed", 23);

這樣對于 我們追求完美可讀的程序員來說,可能是不太能接受的,現在用柯里來優化以上代碼,
先簡要說明什么是函數柯里化:

柯里化是把一個多參數函數轉換成一個嵌套的一元函數過程。  

封裝一個把把多參數函數轉制為一元函數的curry函數

let curry = (fn) => {
 if (typeof fn !== 'function') {
  throw Error('No function provided');
 }
 return function curriedFn(...args) {
  // 傳入參數是否小于函數參數列表長度,
  if (args.length < fn.length) {
   return function() {
    return curriedFn.apply(null, args.concat([].slice.call(arguments)));
   }
  }
  return fn.apply(null, args)
 }
} 
let errorLogger = curry(loggerHelper)("ERROR")("ERROR At Stats.js");
let debugLogger = curry(loggerHelper)("DEBUG")("ERROR")("Debug At Stats.js");
let warnLogger = curry(loggerHelper)("WARN")("Warn")("At Stats.js");
// 用于錯誤
errorLogger("Error message", 21)
// 用于調試
debugLogger('Debug message', 233)
// 用于警告
warnLogger("Warn message", 34);

現在我們能夠輕松引用上面的柯里化并在各自的上下文中使用它們了。

以上是“ES6中的使用技巧”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

es6
AI

新津县| 高碑店市| 阜宁县| 石泉县| 双鸭山市| 沛县| 虹口区| 鲁甸县| 美姑县| 伊通| 柳州市| 平泉县| 平昌县| 威远县| 洛南县| 和政县| 房山区| 德格县| 三江| 塔城市| 乌鲁木齐县| 柳河县| 平定县| 潼关县| 安多县| 蒙山县| 靖边县| 浏阳市| 广河县| 普兰店市| 曲靖市| 禹州市| 安远县| 太原市| 东源县| 葫芦岛市| 儋州市| 黑河市| 宜章县| 苍山县| 靖州|