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

开发 前端
不少人有五年的 JavaScript 经验,但实际上可能只是一年的经验重复用了五次而已。完成同样的逻辑和功能,有人可以写出意大利面条一样的代码,也有人两三行简洁清晰的代码就搞定了。

 [[380148]]

不少人有五年的 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译站公众号。

 

责任编辑:武晓燕 来源: 1024译站
相关推荐

2020-07-21 18:37:14

代码条件变量

2018-09-02 15:43:56

Python代码编程语言

2022-05-05 12:02:45

SCSS函数开发

2024-02-20 08:09:51

Java 8DateUtilsDate工具类

2022-03-03 07:00:43

Mybatiswhere标签

2020-12-14 07:51:16

JS 技巧虚值

2021-12-27 14:12:44

iOS苹果系统

2017-10-16 13:30:28

windows 10技巧输入法

2015-07-13 08:49:54

2020-10-28 08:06:09

Vue3框架数据

2018-10-06 21:51:37

代码SOLID编程

2018-07-10 11:33:58

计算器iPhone删除

2023-11-13 08:49:54

2021-10-19 14:49:49

CSS前端

2018-10-07 06:30:40

代码设计模式面向对象原则

2021-02-26 08:32:28

RocketMQ阿里云

2021-01-28 10:04:40

JavaScript开发技术

2023-07-07 14:47:46

JavaScript技巧

2016-07-22 17:55:07

云计算

2018-09-03 16:05:03

编程语言Python代码技巧
点赞
收藏

51CTO技术栈公众号