這次帶給大家很重要的9個使用技巧(附程式碼),JS使用的注意事項有哪些,以下就是實戰案例,一起來看一下。
1. 刪除數組尾部元素
#一個簡單的用來清空或則刪除數組尾部元素的簡單方法就是改變數組的length屬性值。
1 2 3 4 5 6 7 8 | const arr = [11, 22, 33, 44, 55, 66];
arr.length = 3;
console.log(arr);
arr.length = 0;
console.log(arr);
console.log(arr[2]);
|
登入後複製
2.使用物件解構來模擬命名參數
如果你需要將一系列可選項作為參數傳入函數,那麼你也許傾向於使用了一個物件(Object)來定義配置(Config)。
1 2 3 4 5 6 7 | doSomething({ foo: 'Hello' , bar: 'Hey!' , baz: 42 });
function doSomething(config) {
const foo = config.foo !== undefined ? config.foo : 'Hi' ;
const bar = config.bar !== undefined ? config.bar : 'Yo!' ;
const baz = config.baz !== undefined ? config.baz : 13;
}
|
登入後複製
這是一個陳舊、但很有效的方法,它模擬了JavaScript中的命名參數。不過呢,在doSomething中處理config的方式略顯繁瑣。在ES2015中,你可以直接使用物件解構。
1 2 3 | function doSomething({ foo = 'Hi' , bar = 'Yo!' , baz = 13 }) {
}
|
登入後複製
如果你想讓這個參數是可選的,也很簡單。
1 2 3 | function doSomething({ foo = 'Hi' , bar = 'Yo!' , baz = 13 } = {}) {
}
|
登入後複製
3. 使用物件解構來處理陣列
可以使用物件解構的語法來取得陣列的元素:
1 2 | const csvFileLine = '1997,John Doe,US,john@doe.com,New York' ;
const { 2: country, 4: state } = csvFileLine.split( ',' );
|
登入後複製
#4 . 在switch語句中用範圍值
可以使用下面的技巧來寫滿足範圍值的switch語句:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | function getWaterState(tempInCelsius) {
let state;
switch (true) {
case (tempInCelsius <= 0):
state = 'Solid';
break ;
case (tempInCelsius > 0 && tempInCelsius < 100):
state = 'Liquid';
break ;
default :
state = 'Gas';
}
return state;
}
|
登入後複製
#5. await多個async函數
在使用async/await的時候,可以使用Promise.all來await多個async函式。
1 | await Promise.all([anAsyncCall(), thisIsAlsoAsync(), oneMore()])
|
登入後複製
6. 建立一個純(pure)物件
你可以建立一個100%的純對象,他不會從Object中繼承任何屬性或則方法(比如,constructor,toString()等等)。
1 2 3 4 5 | const pureObject = Object.create(null);
console.log(pureObject);
console.log(pureObject.constructor);
console.log(pureObject.toString);
console.log(pureObject.hasOwnProperty);
|
登入後複製
7.格式化JSON程式碼
JSON.stringify不只可以將一個物件字元化,還可以格式化輸出JSON物件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | const obj = {
foo: { bar: [11, 22, 33, 44], baz: { bing: true, boom: 'Hello' } }
};
JSON.stringify(obj, null, 4);
|
登入後複製
8. 從陣列中移除重複元素
ES2015中,有了集合的語法。透過使用集合語法和Spread操作,可以輕鬆將重複的元素移除:
1 2 3 | const removeDuplicateItems = arr => [... new Set(arr)];
removeDuplicateItems([42, 'foo' , 42, 'foo' , true, true]);
|
登入後複製
9. 平鋪多維數組
使用Spread操作,可以輕鬆去平鋪嵌套多維數組:
1 2 | const arr = [11, [22, 33], [44, 55], 66];
const flatArr = [].concat(...arr);
|
登入後複製
可惜,上面的方法只適用於二維數組。不過,透過遞歸,我們可以平舖任意維度的嵌套數組。
1 2 3 4 5 6 7 8 | unction flattenArray(arr) {
const flattened = [].concat(...arr);
return flattened.some(item => Array.isArray(item)) ?
flattenArray(flattened) : flattened;
}
const arr = [11, [22, 33], [44, [55, 66, [77, [88]], 99]]];
const flatArr = flattenArray(arr);
|
登入後複製
就這些啦!我希望這些小技巧可以幫你寫出更漂亮的JS程式碼!如果還不夠,那不妨用Fundebug做你的輔助!
精選評論
Ethan B Martin: 這個switch的寫法很巧妙,不過不推薦。請不要鼓勵開發者用這種方式去寫JS程式碼。我們曾經有一個工程師這麼寫,後來在代碼review的時候,造成了極大的閱讀苦難。還好我們及時將其重構為更容易讀懂的程式碼。不妨對比一下用swtich和if的區別:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | function getWaterState1(tempInCelsius) {
let state;
switch (true) {
case (tempInCelsius <= 0):
state = 'Solid' ;
break ;
case (tempInCelsius < 100):
state = 'Liquid' ;
break ;
default :
state = 'Gas' ;
}
return state;
}
function getWaterState2(tempInCelsius) {
if (tempInCelsius <= 0) {
return 'Solid' ;
}
if (tempInCelsius < 100) {
return 'Liquid' ;
}
return 'Gas' ;
}
|
登入後複製
第二種寫法有幾點優勢:
A) 代碼量更少,更加易讀;B) 你不需要聲明一個局部變量,讀者不會一直要去追蹤你如何對這個變數做了更改;C) switch(true)真的會讓人莫名其妙。
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
本地環境操作node伺服器跨域用法摘要
#如何取得DOM文檔樹內所有數據
#
以上是很重要的9個使用技巧(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!