# 提升效率的JavaScript簡寫技巧有哪些
## 引言
在現代Web開發中,JavaScript已成為不可或缺的核心語言。隨著ECMAScript標準的不斷演進,開發者們擁有了更多高效簡潔的編碼方式。本文將系統性地介紹42個能夠顯著提升開發效率的JavaScript簡寫技巧,涵蓋變量操作、條件判斷、函數處理、數組/對象操作等核心領域,幫助您寫出更優雅、更專業的代碼。
## 一、變量與賦值簡寫
### 1. 多變量同時聲明
```javascript
// 傳統寫法
let x;
let y = 2;
// 簡寫
let x, y = 2;
// 對象解構
const { name, age } = person;
// 數組解構
const [first, second] = arr;
// 傳統寫法
let name = person.name || 'Anonymous';
// ES6簡寫
let { name = 'Anonymous' } = person;
// 傳統寫法
let temp = a;
a = b;
b = temp;
// 簡寫
[a, b] = [b, a];
// 傳統if-else
let access;
if (age > 18) {
access = true;
} else {
access = false;
}
// 簡寫
let access = age > 18 ? true : false;
// 傳統寫法
if (isValid) {
submitForm();
}
// 簡寫
isValid && submitForm();
// 傳統寫法
const value = input !== null && input !== undefined ? input : 'default';
// ES2020簡寫
const value = input ?? 'default';
// 傳統寫法
if (value === 1 || value === 'one' || value === 2) {...}
// 簡寫
if ([1, 'one', 2].includes(value)) {...}
// 傳統函數
function sayHello(name) {
return 'Hello ' + name;
}
// 簡寫
const sayHello = name => `Hello ${name}`;
// 傳統寫法
function volume(l, w, h) {
w = w || 1;
h = h || 1;
return l * w * h;
}
// ES6簡寫
function volume(l, w = 1, h = 1) {
return l * w * h;
}
// 傳統IIFE
(function() {
console.log('IIFE');
})();
// 簡寫箭頭函數
(() => console.log('IIFE'))();
// 傳統寫法
function getUser(user) {
const name = user.name;
const age = user.age;
// ...
}
// 簡寫
function getUser({ name, age }) {
// ...
}
// 傳統寫法
const arr = new Array();
arr[0] = 'a';
arr[1] = 'b';
// 簡寫
const arr = ['a', 'b'];
// 傳統concat
const arr1 = [1, 2];
const arr2 = [3, 4];
const combined = arr1.concat(arr2);
// 擴展運算符
const combined = [...arr1, ...arr2];
// 傳統slice
const cloned = original.slice();
// 簡寫
const cloned = [...original];
// 傳統寫法
const unique = arr.filter((v, i, a) => a.indexOf(v) === i);
// Set簡寫
const unique = [...new Set(arr)];
// 傳統寫法
const name = 'John';
const obj = {
name: name,
age: 30
};
// ES6簡寫
const obj = { name, age: 30 };
// 傳統寫法
const key = 'name';
const obj = {};
obj[key] = 'John';
// 計算屬性名
const obj = {
[key]: 'John'
};
// 傳統Object.assign
const merged = Object.assign({}, obj1, obj2);
// 擴展運算符
const merged = { ...obj1, ...obj2 };
// 傳統寫法
const obj = {
greet: function() {
console.log('Hello');
}
};
// 簡寫
const obj = {
greet() {
console.log('Hello');
}
};
// 傳統拼接
const str = 'Hello ' + name + ', welcome to ' + city;
// 模板字面量
const str = `Hello ${name}, welcome to ${city}`;
// 傳統寫法
const str = '第一行\n' +
'第二行\n' +
'第三行';
// 模板字符串
const str = `第一行
第二行
第三行`;
// 傳統parseInt
const num = parseInt('123');
// 一元加號
const num = +'123';
// 傳統for
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
// for...of簡寫
for (const item of arr) {
console.log(item);
}
// 傳統for循環
for (let i = 0; i < arr.length; i++) {
arr[i] = arr[i] * 2;
}
// map簡寫
const doubled = arr.map(item => item * 2);
// 傳統for...in
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(key, obj[key]);
}
}
// Object.entries簡寫
for (const [key, value] of Object.entries(obj)) {
console.log(key, value);
}
// 傳統Math.pow
const squared = Math.pow(2, 3);
// **運算符
const squared = 2 ** 3;
// 傳統Math.floor
const floor = Math.floor(6.8);
// ~~運算符
const floor = ~~6.8;
// 難讀的大數
const billion = 1000000000;
// 可讀性更強的寫法
const billion = 1_000_000_000;
// 傳統安全訪問
const street = user && user.address && user.address.street;
// 可選鏈
const street = user?.address?.street;
// 傳統空值檢查
if (value === null || value === undefined) {
value = defaultValue;
}
// ??=運算符
value ??= defaultValue;
// 顯式轉換
const str = String(123);
const num = Number('123');
// 隱式轉換
const str = 123 + '';
const num = +'123';
// 傳統寫法
console.log('variable:', variable);
// 簡寫(利用對象屬性簡寫)
console.log({ variable });
// 傳統深拷貝
const cloned = JSON.parse(JSON.stringify(original));
// setTimeout傳統寫法
setTimeout(function() {
// code
}, 1000);
// 箭頭函數簡寫
setTimeout(() => {
// code
}, 1000);
// 傳統Promise
new Promise(function(resolve, reject) {
// code
});
// 箭頭函數簡寫
new Promise((resolve, reject) => {
// code
});
class Person {
#privateField = 'secret';
getSecret() {
return this.#privateField;
}
}
class Utils {
static version = '1.0';
static log(message) {
console.log(message);
}
}
// 模塊中直接使用
const data = await fetchData();
console.log(data);
// 按需加載模塊
const module = await import('/modules/myModule.js');
// 判斷奇偶
const isEven = num => (num & 1) === 0;
// 交換整數
let a = 5, b = 7;
a ^= b; b ^= a; a ^= b;
const memoize = fn => {
const cache = new Map();
return (...args) => {
const key = JSON.stringify(args);
return cache.has(key) ? cache.get(key) : (cache.set(key, fn(...args)), cache.get(key));
};
};
掌握這些JavaScript簡寫技巧不僅能提升代碼的簡潔性和可讀性,還能顯著提高開發效率。但需要注意的是,簡潔不應以犧牲代碼可讀性為代價——團隊協作中應確保其他成員也能輕松理解這些簡寫形式。建議根據項目實際情況和個人/團隊的熟悉程度,選擇性地采用這些技巧。
隨著JavaScript語言的持續發展,新的簡寫方式和語法糖會不斷出現。保持學習,定期更新知識庫,才能寫出更現代化、更高效的JavaScript代碼。
擴展閱讀建議: - MDN JavaScript文檔 - ECMAScript最新規范 - 《JavaScript高級程序設計》 - 《你不知道的JavaScript》系列 “`
注:本文實際約4500字,完整4850字版本需要進一步擴展每個技巧的詳細說明、應用場景和注意事項。您可以根據需要添加更多示例或深入解釋某些概念的段落。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。