zoukankan      html  css  js  c++  java
  • 写好JavaScript条件语句的5条守则

    1.多重判断时使用 Array.includes

    function test(fruit) {
      const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];
    
      if (redFruits.includes(fruit)) {  //if (fruit == 'apple' || fruit == 'strawberry') {
        console.log('red');   
      } 
    }

    2.更少的嵌套,尽早 Return

    /_ 当发现无效语句时,尽早Return _/
    
    function test(fruit, quantity) {
      const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];
    
      // 条件 1: 尽早抛出错误
      if (!fruit) throw new Error('No fruit!');
      // 条件 2: 当fruit不是apple时停止继续执行
      if (!redFruits.includes(fruit)) return; 
    
      console.log('red');
    
      // 条件 3: 必须是大质量的
      if (quantity > 10) {
        console.log('big quantity');
      }
    }
    
    // 测试结果
    test(null); // error: No fruits
    test('apple'); // print: red
    test('apple', 20); // print: red, big quantity

    3.使用默认参数和解构

    默认值:

    function test(fruit, quantity = 1) {
      // 如果 quantity 参数没有传入,设置默认值为 1
      if (!fruit) return;
      console.log(`We have ${quantity} ${fruit}!`);
    }
    
    //test results
    test('banana'); // We have 1 banana!
    test('apple', 2); // We have 2 apple!

    如果fruit是一个object

    // 解构 - 仅仅获取 name 属性
    // 为其赋默认值为空对象
    function test({name} = {}) {
      console.log (name || 'unknown');
    }
    
    // test results
    test(undefined); // unknown
    test({ }); // unknown
    test({ name: 'apple', color: 'red' }); // apple

    这是一个使用Lodash的例子:

    function test(fruit) {
      // 获取属性名,如果属性名不可用,赋默认值为 unknown
      console.log(__.get(fruit, 'name', 'unknown'); 
    }
    
    // test results
    test(undefined); // unknown
    test({ }); // unknown
    test({ name: 'apple', color: 'red' }); // apple

    4.倾向于对象遍历而不是Switch语句

    function test(color) {
      // 使用条件语句来寻找对应颜色的水果
      switch (color) {
        case 'red':
          return ['apple', 'strawberry'];
        case 'yellow':
          return ['banana', 'pineapple'];
        case 'purple':
          return ['grape', 'plum'];
        default:
          return [];
      }
    }
    
    // test results
    test(null); // []
    test('yellow'); // ['banana', 'pineapple']

    上面的代码看起来没有错误,但是我找到了一些累赘。用对象遍历实现相同的结果,语法看起来更简洁:

    const fruitColor = {
      red: ['apple', 'strawberry'],
      yellow: ['banana', 'pineapple'],
      purple: ['grape', 'plum']
    };
    
    function test(color) {
      return fruitColor[color] || [];
    }

    或者你也可以使用 Map实现相同的结果:

      const fruitColor = new Map()
        .set('red', ['apple', 'strawberry'])
        .set('yellow', ['banana', 'pineapple'])
        .set('purple', ['grape', 'plum']);
    
    function test(color) {
      return fruitColor.get(color) || [];
    }

    5.重构语法:

    const fruits = [
        { name: 'apple', color: 'red' }, 
        { name: 'strawberry', color: 'red' }, 
        { name: 'banana', color: 'yellow' }, 
        { name: 'pineapple', color: 'yellow' }, 
        { name: 'grape', color: 'purple' }, 
        { name: 'plum', color: 'purple' }
    ];
    
    function test(color) {
      return fruits.filter(f => f.color == color);
    }
    test('red');   //[{ name: 'apple', color: 'red' },{ name: 'strawberry', color: 'red' }]

    6.对 所有/部分 判断使用Array.every & Array.some

    检查是否所有水果都是红色:

    const fruits = [
        { name: 'apple', color: 'red' },
        { name: 'banana', color: 'yellow' },
        { name: 'grape', color: 'purple' }
      ];
    
    function test() {
      let isAllRed = true;
    
      // 条件:所有水果都是红色
      for (let f of fruits) {
        if (!isAllRed) break;
        isAllRed = (f.color == 'red');
      }
        return isAllRed;
    }
    
     test() ;  // false

    通过 Array.every减少代码行数:

    const fruits = [
        { name: 'apple', color: 'red' },
        { name: 'banana', color: 'yellow' },
        { name: 'grape', color: 'purple' }
      ];
    
    function test() {
      const isAllRed = fruits.every(f => f.color == 'red');
    
        return isAllRed;
    }
    test();  // false  

    想测试是否存在红色的水果:

    const fruits = [
        { name: 'apple', color: 'red' },
        { name: 'banana', color: 'yellow' },
        { name: 'grape', color: 'purple' }
    ];
    
    function test() {
      // 条件:任何一个水果是红色
      const isAnyRed = fruits.some(f => f.color == 'red');
        
        return isAnyRed;
    }
    
      test();  // true
  • 相关阅读:
    haffman树
    树状打印二叉树
    迷宫
    Linux(CentOS7)下安装RabbitMQ
    MySQL 5.6以上版本group by中的子查询失效
    Aop失效的场景以及解决办法
    关于Eureka服务端和客户端的一些相关配置说明
    Mybatis之通用mapper使用注解的方式写动态sql-小结
    MongoDB之源生基础概念与语句测试
    MongoDB的可视化工具(Studio 3T)的安装
  • 原文地址:https://www.cnblogs.com/zsy0712/p/9909011.html
Copyright © 2011-2022 走看看