• JavaScript技巧总结


    1. 简化条件表达式

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

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

    2. 简化 if ... else

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

    1. // 新手的写法
    2. let test= boolean;
    3. if (x > 100) {
    4.     test = true;
    5. else {
    6.     test = false;
    7. }
    8. // 简写表达式
    9. let test = (x > 10) ? true : false;
    10. // 更直接的
    11. let test = x > 10;
    12. 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 的时候我经常看到这样的代码,判断变量不是nullundefined''的时候赋值给第二个变量,否则给个默认值:

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

    4. 简写循环遍历

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

    1. // Longhand
    2. for (var i = 0; i < testData.length; i++)
    3. // Shorthand
    4. 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. [112432].forEach(testData);
    5. // 打印输出: test[0= 11test[1= 24test[2= 32

    4. 简化 switch

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

    1. // Longhand
    2. switch (data) {
    3.   case 1:
    4.     test1();
    5.   break;
    6.   case 2:
    7.     test2();
    8.   break;
    9.   case 3:
    10.     test();
    11.   break;
    12.   // And so on...
    13. }
    14. // Shorthand
    15. var data = {
    16.   1test1,
    17.   2test2,
    18.   3test
    19. };
    20. 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. }
    6. //shorthand
    7. getArea = diameter => (
    8.   Math.PI * diameter;
    9. )

    7. 简化分支条件语句

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

    1. // Longhand
    2. if (type === 'test1') {
    3.   test1();
    4. }
    5. else if (type === 'test2') {
    6.   test2();
    7. }
    8. else if (type === 'test3') {
    9.   test3();
    10. }
    11. else if (type === 'test4') {
    12.   test4();
    13. else {
    14.   throw new Error('Invalid value ' + type);
    15. }
    16. // Shorthand
    17. var types = {
    18.   test1test1,
    19.   test2test2,
    20.   test3test3,
    21.   test4test4
    22. };
    23. var func = types[type];
    24. (!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. console.log(str); // test test test test test 
    6. //shorthand 
    7. '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. let number = 98_234_567
  • 相关阅读:
    Node编写用户注册接口
    链路状态路由协议 OSPF (三)
    iView复合型输入框动态生成表达式
    史上最全的mysql数据类型汇总(下)
    我的创作纪念日
    sql性能优化
    一键合并多个TXT文本,将保存在TXT的快递单号进行一键合并
    promise笔记(二)
    “神经网络之父”和“深度学习鼻祖”Geoffrey Hinton
    自动化测试、测试左移、精准测试,一次性说透
  • 原文地址:https://blog.csdn.net/weixin_42693104/article/details/133362548