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
  • 相关阅读:
    模拟登陆江西理工大学教务系统
    python3爬虫 -----华东交大校园新闻爬取与数据分析
    以selenium模拟登陆12306
    PAT (Basic Level) Practice (中文)1076 Wifi密码 (15 分)
    PAT (Basic Level) Practice (中文)1047 编程团体赛 (20 分)
    PAT (Basic Level) Practice (中文)1029 旧键盘 (20 分)
    PAT (Basic Level) Practice (中文)1016 部分A+B (15 分)
    PAT (Basic Level) Practice (中文)1031 查验身份证 (15 分)
    PAT (Basic Level) Practice (中文)1041 考试座位号 (15 分)
    PAT (Basic Level) Practice (中文)1037 在霍格沃茨找零钱 (20 分)
  • 原文地址:https://www.cnblogs.com/zsy0712/p/9909011.html
Copyright © 2011-2022 走看看