优雅的敲JS代码的几个原则

一、条件语句

       1,使用 Array.includes 来处理多重 || 条件         

// ----- 一般 ------

    if (fruit == 'apple' || fruit == 'strawberry' || fruit == 'banana'  ) {
          console.log('red');
    }

//------- 优雅 ------

    // 把条件提取到数组中
    const redFruits = ['apple', 'strawberry', 'banana', 'cranberries']; 

if (redFruits.includes(fruit)) {
console.log(
'red');
}

       

        2,少写嵌套,无效条件尽早返回

/_ 当发现无效条件时尽早返回 _/
function test(fruit, quantity) {
  const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];

  if (!fruit) thrownewError('No fruit!'); // 条件 1:尽早抛出错误
  if (!redFruits.includes(fruit)) return; // 条件 2:当 fruit 不是红色的时候,直接返回
  console.log('red');

  // 条件 3:必须是大量存在
  if (quantity > 10) {
    console.log('big quantity');
  }
}

     

      3,使用函数默认参数和解构

// -------   默认参数  一般   -------

function test(fruit, quantity) {
    if (!fruit) return;
    const q = quantity || 1; // 如果没有提供 quantity,默认为 1
    console.log(`We have ${q}${fruit}!`);
}

// -------   默认参数  优雅   -------

function test(fruit, quantity = 1) { // 如果没有提供 quantity,默认为 1
    if (!fruit) return;
    console.log(`We have ${quantity}${fruit}!`);
}

// -------   解构  一般   -------

 function test(fruit) { 
    // 如果有值,则打印出来
    if (fruit && fruit.name)  {
      console.log (fruit.name);
    } else {
      console.log('unknown');
    }
}

// -------   解构  优雅   -------

  // 解构 —— 只得到 name 属性
  // 默认参数为空对象 {}
  function test({name} = {}) {
    console.log (name || 'unknown');
  }

     

      4,相较于 switch,Map / Object 也许是更好的选择

//------   switch   一般 ---------

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

// -----  Object   优雅 -----

    // 使用对象字面量来找到对应颜色的水果
    const fruitColor = {
        red: ['apple', 'strawberry'],
        yellow: ['banana', 'pineapple'],
        purple: ['grape', 'plum']
     };
    function test(color) {
      return fruitColor[color] || [];
    }

// -----  Map   优雅 -----

  // 使用 Map 来找到对应颜色的水果
  const fruitColor = newMap()
      .set('red', ['apple', 'strawberry'])
      .set('yellow', ['banana', 'pineapple'])
      .set('purple', ['grape', 'plum']);
  function test(color) {
    return fruitColor.get(color) || [];
  }

// -----  filter  优雅 -----

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) {
  // 使用 Array filter 来找到对应颜色的水果
  return fruits.filter(f => f.color == color);
}

 

      5,使用 Array.every 和 Array.some 来处理全部/部分满足条件

// -------   直接优雅 --------
const fruits = [
    { name: 'apple', color: 'red' },
    { name: 'banana', color: 'yellow' },
    { name: 'grape', color: 'purple' }
  ];
function test() {
  // 条件:(简短形式)所有的水果都必须是红色
  const isAllRed = fruits.every(f => f.color == 'red');
  
  // 条件:至少一个水果是红色的
  const isAnyRed = fruits.some(f => f.color == 'red');
  console.log(isAllRed); // false
}

 

posted @ 2018-10-18 17:55  司马老朋  阅读(306)  评论(0编辑  收藏  举报