语言的一些高级特性的使用可以帮助我们更好去实现一些复杂的功能,以尽量简短的语句来使代码看上去更简洁、逻辑更完善,而且这样减少了出现 bug 的风险。接下来让我总结一些 JavaScript 中的一些简写小技巧。
1. 声明多个变量
// 常规写法 let x; let y = 20; // 简写 let x, y = 20;
2. 为多个变量赋值
我们可以使用数组解构赋值,仅用一行代码实现为多个变量赋值。
// 常规写法 let a, b, c; a = 5; b = 8; c = 12; // 简写 let [a, b, c] = [5, 8, 12];
3. 恰当使用三元运算符
我们可以在这里用三元运算符(也称条件运算符)节省5行代码。
// 常规写法 let marks = 26; let result; if(marks >= 30){ result = 'Pass'; }else{ result = 'Fail'; } // 简写 let result = marks >= 30 ? 'Pass' : 'Fail';
4. 指定默认值
我们可以使用「OR ( || ) 短路求值」的逻辑,来给定一个默认值。当 ||
我们的期望值是一个「false」值的时候,整个表达式的值便会取到我们给定的默认值。
// 常规写法 let imagePath; let path = getImagePath(); if(path !== null && path !== undefined && path !== '') { imagePath = path; } else { imagePath = 'default.jpg'; } // 简写 let imagePath = getImagePath() || 'default.jpg';
5. AND(&&)短路求值
如果你只在一个变量为真的情况下才调用某个函数,那么你可以用「AND(&&)短路求值」的逻辑来代替。
// 常规写法 if (isLoggedin) { goToHomepage(); } // 简写 isLoggedin && goToHomepage();
当你想有条件地渲染某个组件时,可以尝试使用 AND(&&) 这种简写方式。例如下面这个例子
<div> { this.state.isLoading && <Loading /> } </div>
6. 交换两个变量的值
当我们想交换两个变量的值时,经常会采取引入第三个变量的方法。其实我们可以通过数组解构赋值轻松地交换两个变量。
let x = 'Hello', y = 55; // 常规写法,引入第三个变量 const temp = x; x = y; y = temp; // 简写,使用数组解构赋值 [x, y] = [y, x];
7. 善用箭头函数
// 常规写法 function add(num1, num2) { return num1 + num2; } // 简写 const add = (num1, num2) => num1 + num2;
8. 模板字符串
我们通常使用 +
运算符来连接字符串和其他类型的变量。有了 ES6 模板字符串,我们可以用更简单的方式来组合字符串。
// 常规写法 console.log('You got a missed call from ' + number + ' at ' + time); // 简写 console.log(`You got a missed call from ${number} at ${time}`);
9. 多行字符串
对于多行字符串,我们通常使用+操作符和一个新的换行符
(\n)
拼接实现。其实我们可以通过使用反引号 (')
来更简单地实现。
// 常规写法 console.log('JavaScript, often abbreviated as JS, is a\n' + '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.`);
10. 多条件检查
对于多值匹配,我们可以把所有的值放在数组中,使用数组提供的 indexOf()
或 includes()
方法来简写。
// 常规写法 if (value === 1 || value === 'one' || value === 2 || value === 'two') { // 执行一些代码 } // 简写1 if ([1, 'one', 2, 'two'].indexOf(value) >= 0) { // 执行一些代码 } // 简写2 if ([1, 'one', 2, 'two'].includes(value)) { // 执行一些代码 }