写了这么多年 JavaScript ,竟然还不知道这些技巧?

不少人有五年的 JavaScript 经验,但实际上可能只是一年的经验重复用了五次而已。完成同样的逻辑和功能,有人可以写出意大利面条一样的代码,也有人两三行简洁清晰的代码就搞定了。简洁的代码不但方便阅读,还能减少复杂逻辑和出错的可能性。本文就介绍一些常用的JavaScript简化技巧,日常开发都用得上。

1. 简化条件表达式

经常碰到这种情况,要判断某个变量是否为指定的某些值,用常规的逻辑表达式会很长。我的做法是把这些值放进数组里:

 
 
 
 
  1. // 太长的逻辑表达式 
  2. if (x === 'abc' || x === 'def' || x === 'ghi' || x ==='jkl') { 
  3.     //其他逻辑 
  4. // 简写 
  5. if (['abc', 'def', 'ghi', 'jkl'].includes(x)) { 
  6.    //其他逻辑 

2. 简化 if ... else

if...else太常用了,以至于很多人都忘了其实还有其他方式来判断条件。比如简单的变量赋值,完全没必要用这种冗长的语句,一行表达式就搞定了:

 
 
 
 
  1. // 新手的写法 
  2. let test= boolean; 
  3. if (x > 100) { 
  4.     test = true; 
  5. } else { 
  6.     test = false; 
  7. // 简写表达式 
  8. let test = (x > 10) ? true : false; 
  9. // 更直接的 
  10. let test = x > 10; 
  11. console.log(test); 

三元表达式可以做复杂的条件分支判断,不过牺牲了一些可读性:

 
 
 
 
  1. let x = 300, 
  2. let test2 = (x > 100) ? 'greater 100' : (x < 50) ? 'less 50' : 'between 50 and 100'; 
  3. console.log(test2); // "greater than 100" 

3. 判空并赋默认值

Code Review 的时候我经常看到这样的代码,判断变量不是null,undefined,''的时候赋值给第二个变量,否则给个默认值:

 
 
 
 
  1. if (first !== null || first !== undefined || first !== '') { 
  2.     let second = first; 
  3. // 简写 
  4. let second = first || ''; 

4. 简写循环遍历

for 循环是最基本的,但是有点繁琐。可以用for...in、for...of或者forEach代替:

 
 
 
 
  1. // Longhand 
  2. for (var i = 0; i < testData.length; i++) 
  3.  
  4. // Shorthand 
  5. for (let i in testData) or  for (let i of testData) 

数组遍历:

 
 
 
 
  1. function testData(element, index, array) { 
  2.   console.log('test[' + index + '] = ' + element); 
  3.  
  4. [11, 24, 32].forEach(testData); 
  5. // 打印输出: test[0] = 11, test[1] = 24, test[2] = 32 

4. 简化 switch

这个技巧也很常用,把switch 转换成对象的key-value形式,代码简洁多了:

 
 
 
 
  1. // Longhand 
  2. switch (data) { 
  3.   case 1: 
  4.     test1(); 
  5.   break; 
  6.  
  7.   case 2: 
  8.     test2(); 
  9.   break; 
  10.  
  11.   case 3: 
  12.     test(); 
  13.   break; 
  14.   // And so on... 
  15.  
  16. // Shorthand 
  17. var data = { 
  18.   1: test1, 
  19.   2: test2, 
  20.   3: test 
  21. }; 
  22.  
  23. data[anything] && data[anything](); 

5. 简化多行字符串拼接

如果一个字符串表达式过长,我们可能会拆成多行拼接的方式。不过随着 ES6 的普及,更好的做法是用模板字符串:

 
 
 
 
  1. //longhand 
  2. const data = 'abc abc abc abc abc abc\n\t' 
  3.     + 'test test,test test test test\n\t' 
  4. //shorthand 
  5. const data = `abc abc abc abc abc abc 
  6.          test test,test test test test` 

6. 善用箭头函数简化 return

ES6 的箭头函数真是个好东西,当函数简单到只需要返回一个表达式时,用箭头函数最合适不过了,return都不用写:

 
 
 
 
  1. Longhand: 
  2. //longhand 
  3. function getArea(diameter) { 
  4.   return Math.PI * diameter 
  5. //shorthand 
  6. getArea = diameter => ( 
  7.   Math.PI * diameter; 

7. 简化分支条件语句

又是你,if...else if...else!跟switch类似,也可以用key-value形式简化:

 
 
 
 
  1. // Longhand 
  2. if (type === 'test1') { 
  3.   test1(); 
  4. else if (type === 'test2') { 
  5.   test2(); 
  6. else if (type === 'test3') { 
  7.   test3(); 
  8. else if (type === 'test4') { 
  9.   test4(); 
  10. } else { 
  11.   throw new Error('Invalid value ' + type); 
  12. // Shorthand 
  13. var types = { 
  14.   test1: test1, 
  15.   test2: test2, 
  16.   test3: test3, 
  17.   test4: test4 
  18. }; 
  19.  
  20. var func = types[type]; 
  21. (!func) && throw new Error('Invalid value ' + type); func(); 

8. 重复字符串 N 次

有时候出于某种目的需要将字符串重复 N 次,最笨的方法就是用for循环拼接。其实更简单的方法是用repeat:

 
 
 
 
  1. //longhand  
  2. let test = '';  
  3. for(let i = 0; i < 5; i ++) {  
  4.   test += 'test ';  
  5. }  
  6. console.log(str); // test test test test test  
  7. //shorthand  
  8. 'test '.repeat(5); 

9. 指数运算

能省则省,低碳环保。

 
 
 
 
  1. //longhand 
  2. Math.pow(2,3); // 8 
  3. //shorthand 
  4. 2**3 // 8 

10. 数字分隔符

这是比较新的语法,ES2021 提出来的,数字字面量可以用下划线分割,提高了大数字的可读性:

 
 
 
 
  1. // 旧语法 
  2. let number = 98234567 
  3.  
  4. // 新语法 
  5. let number = 98_234_567 

总结

没啥好总结的,拿去用就是了。

本文转载自微信公众号「1024译站」,可以通过以下二维码关注。转载本文请联系1024译站公众号。

分享文章:写了这么多年 JavaScript ,竟然还不知道这些技巧?
文章转载:http://www.shufengxianlan.com/qtweb/news17/318117.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联