【JavaScript】20個JavaScript速寫技巧
參考資料來源:Top 20 JavaScript Shorthand Techniques that will save your time
多變數的宣告
//標準寫法
let x; let y = 20;
//速寫法
let x, y = 20;
指定多個變數的值 (解構賦值)
解構賦值 (Destructuring assignment):把陣列或物件中的資料解開擷取成為獨立變數。//標準寫法
let a, b, c;
a = 5;
b = 8;
c = 12;
//速寫法
let [a, b, c] = [5, 8, 12];
三元運算子
可將5行的程式碼以1行程式碼取代//標準寫法
let number = 26;
let isEven;
if(number % 2){
isEven = true;
}else{
isEven = false;
}
//速寫法
let isEven = number % 2 ? true : false;
指定預設值
我們可以使用OR(||)
快捷求值法來指定變數的預設值
//標準寫法
let imagePath;
let path = getImagePath();
if(path !== null && path !== undefined && path !== '') {
imagePath = path;
} else {
imagePath = 'default.jpg';
}
//速寫法
let imagePath = getImagePath() || 'default.jpg';
AND(&&) 快捷求值法
如果在一個條件成立下進行函式/方法的呼叫時,可以使用AND(&&)
快捷求值法將程式碼減化成1行。
//標準寫法
if (isLoggedin) {
goToHomepage();
}
//速寫法
isLoggedin && goToHomepage();
只有在isLoggedin
是True的情況下,&& 後面的goToHomepage()
才會執行。
A && B 是A若是FALSE,B就不必看。
A || B 則是A是TRUE的話,B就不必看。
交換2個變數的值
一般解法是用中間變數來交換2個變數的值,我們可以使用解構賦值 (Destructuring assignment)來交換2個變數的值。let x = 'Hello', y = 55;
//標準寫法
const temp = x;
x = y;
y = temp;
//速寫法
[x, y] = [y, x];
Arrow Function/箭頭函式
//標準寫法
function add(num1, num2) {
return num1 + num2;
}
//速寫法
const add = (num1, num2) => num1 + num2;
Template Literals/樣版字符
一般我們會使用 + 這個運算子來連接 字串與變數,ES6導入了樣版字符可以更簡單地做到字串與變數的連接。(跟字串的單引號不同,`是1旁邊的按鍵,這個字元叫backticks。)//標準寫法
console.log('You got a missed call from ' + number + ' at ' + time);
//速寫法
console.log(`You got a missed call from ${number} at ${time}`);
Multi-line String 多行字串
多行字串傳統的方式是使用'n'跟'+'運算子來達成,ES6提供了一個較快的方法,使用'`' backtick字元與''字元。//標準/傳統寫法 console.log('JavaScript, often abbreviated as JS, is an' + 'programming language that conforms to the n' + 'ECMAScript specification. JavaScript is high-level,n' + 'often just-in-time compiled, and multi-paradigm.' ); //速寫法 console.log(`JavaScript, often abbreviated as JS, is a programming language that conforms to the ECMAScript specification. JavaScript is high-level, often just-in-time compiled, and multi-paradigm.`);
Multiple condition checking 多條件檢查
針對多個數值的比對,我們可以將所有的值放到陣列裏,並且使用indexOf()方法,
//標準寫法
if (value === 1 || value === 'one' || value === 2 || value === 'two') {
// Execute some code
}
//速寫法
if ([1, 'one', 2, 'two'].indexOf(value) >= 0) {
// Execute some code
}
Object Property Assignment物件屬性值指定
如果物件的屬性(key)與值(value)是一樣的,那麼就可以直接使用let obj = {firstname, lastname};
JavaScript會自動地指定與屬性名稱一樣的值。
let firstname = 'Amitav';
let lastname = 'Mishra';
//標準寫法
let obj = {firstname: firstname, lastname: lastname};
//速寫法
let obj = {firstname, lastname};
String into a Number字串自動轉成數值
JavaScript有內建的parseInt
和 parseFloat
方法將字串轉成整數或浮點數,可以用 (+) 在字串前面,可以得到一樣的結果。
//標準寫法
let total = parseInt('453');
let average = parseFloat('42.6');
//速寫法
let total = +'453';
let average = +'42.6';
Repeat a string for multiple times重覆字串多次
簡單使用字串方法repeat()
可以重覆字串多次。 method we can do it in a single line.
//標準寫法
let str = '';
for(let i = 0; i < 5; i ++) {
str += 'Hello ';
}
console.log(str); // Hello Hello Hello Hello Hello
//速寫法
'Hello '.repeat(5);
Exponent Power 次方/乘冪/指數運算
一般我們可以使用Math.pow()
方法取得一個數值的乘冪,我們可以2個**直接取得次方值。
//標準寫法
const power = Math.pow(4, 3); // 64
//速寫法
const power = 4**3; // 64
Double NOT bitwise operator (~~) 無條件捨去小數
在正數的情況下,剛好等效於Math.floor (底下的例子)
//標準寫法
const floor = Math.floor(6.8); // 6
//速寫法
const floor = ~~6.8; // 6
Find max and min number in array 找出一個陣列中最大與最小的值
//速寫法
const arr = [2, 8, 15, 4];
Math.max(...arr); // 15
Math.min(...arr); // 2
For loop
for...of
迭代陣列裏的值
for...in
迭代陣列的索引值
let arr = [10, 20, 30, 40];
//標準寫法
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
//速寫法
//for of loop
for (const val of arr) {
console.log(val);
}
//for in loop
for (const index in arr) {
console.log(arr[index]);
}
我們可以用for...in
來迭代一個物件的屬性。
let obj = {x: 20, y: 50};
for (const key in obj) {
console.log(obj[key]);
}
Merging of arrays 陣列的合併
let arr1 = [20, 30];
//標準寫法
let arr2 = arr1.concat([60, 80]);
// [20, 30, 60, 80]
//速寫法
let arr2 = [...arr1, 60, 80];
// [20, 30, 60, 80]
Deep cloning of multi-level object 多層物件的深度增生(複製)
若一個物件包含另一個物件,又包含另一個物件,這叫多層物件,要走訪這個多層物件,需要一個物件一個物件迭代…(遞迴) 我們可以用JSON.stringify()
和 JSON.parse()
來達到同樣的目的。
let obj = {x: 20, y: {z: 30}};
//標準寫法
const makeDeepClone = (obj) => {
let newObject = {};
Object.keys(obj).map(key => {
if(typeof obj[key] === 'object'){
newObject[key] = makeDeepClone(obj[key]);
} else {
newObject[key] = obj[key];
}
});
return newObject;
}
const cloneObj = makeDeepClone(obj);
//速寫法
const cloneObj = JSON.parse(JSON.stringify(obj));
Get character from string 取得字串中的字元
let str = 'jscurious.com';
//標準寫法
str.charAt(2); // c
//速寫法
str[2]; // c