zoukankan      html  css  js  c++  java
  • 不可多得的JS优化技巧

    1、有多个条件的 if 语句

    // before:
    
    if (x === 'a' || x === 'b' || x === 'c' || x ==='d') { // 语句 } 
    
    // after:
    
    if (['a', 'b', 'c', 'd'].includes(x)) { // 语句 }

    2、简化 if true ... else

    // before
    let test;
    if (x > 100) {
        test = 1;
    } else {
        test = 2;
    }
    // after
    let test = (x > 10) ? 1: 2;
    //如果是布尔值可以直接进行下方代码
    let test = x > 10;
    console.log(test);
    

     我是经常用三目运算符嵌套操作的,如果条件过多不建议使用。

        扩展三目运算实现多个函数调用

    // nefore
    function a() {
      console.log('a');
    };
    function b() {
      console.log('b');
    };
    var c= 1;
    if (c === 1) {
      a();
    } else {
      b();
    }
    // after
    (c=== 1? b)();

    3、null、undefined和空值检查

    当我们创建新变量时,有时候会检测该变量是不是非null或者undefined等

    // before
    if (test1 !== null || test1 !== undefined || test1 !== '') {
        let test2 = test1;
    }
    // after
    let test2 = test1 || "";
    

    4、给多个变量赋值

    // before
    let a,b,c;
    a = 1;
    b = 2;
    c = 3;
    
    // after
    let [ a, b, c] = [1, 2, 3];
    

    5、用于多个条件判断的&&操作符

    //before
    if (a) {
     callFun(); 
    } 
    //after
    a&& callFun();
    

    6、switch的简化

    涉及到枚举比较多的功能时,避免不了使用switch,但是冗余的代码看起来真的很不爽

    // before
    switch (type) {
      case 1:
        a();
      break;
      case 2:
        b();
      break;
      case 3:
        c();
      break;
      // And so on...
    }
    // after var arr = { 1: a, 2: b, 3: c }; data[type] && data[type]();

    7、扩展运算符简化

    这个大家应该都不陌生

    //before
    const data = [1, 2, 3];
    const test = [4 ,5 , 6].concat(data);
    
    //after
    const data = [1, 2, 3];
    const test = [4 ,5 , 6, ...data];
    console.log(test); // [ 4, 5, 6, 1, 2, 3]

    也可以直接使用扩展运算符进行克隆

    //before
    const a = [1, 2, 3];
    const b = a.slice()
    
    //after
    const a = [1, 2, 3];
    const b = [...a];
    

    8、对象属性赋值

    let a = 'a'; 
    let b = 'b';
    //before
    let obj = {a: a, b: b}; 
    //after
    let obj = {a, b};
    

    9、解构赋值

    //before
    const a = data.a;
    const b = data.b;
    const c = data.c;
    //after
    const { a, b, c} = data;
    

    10、indexOf的按位操作简化

    //before
    if(arr.indexOf(item) > -1) { // item found 
    }
    if(arr.indexOf(item) === -1) { // item not found
    }
    //after
    if(~arr.indexOf(item)) { // item found
    }
    if(!~arr.indexOf(item)) { // item not found
    }
    

    11、Object.entries() 和 Object.values()

    Object.entries()可以把对象转化为对象数组,Object.values()跟前者功能类似,只不过没有键

    // Object.entries()
    const data = {a: "a", b:"b", c:"c"};
    const arr = Object.entries(data);
    console.log(arr);
    /** Output:
    [ [ 'a', 'a' ],
      [ 'b', 'b' ],
      [ 'c', 'c' ]
    ]
    **/
    
    // Object.values()
    const arr2 = Object.values(data);
    console.log(arr2);
    /** Output:
    [ 'a', 'b', 'c']
    **/
    

    12、双重按位操作

    // before
    Math.floor(1.8) === 1 // true
    
    // after
    ~~1.8 === 1 // true
    

    13、获取数组的最大值和最小值

    const arr = [1,2,3];
    Math.max(...arr); // 3
    Math.min(...arr); // 1
    

    14、指数幂简化

    // before
    Math.pow(2,3); // 8
    
    // after
    2**3 // 8
    

    15、数组find简化

    const data = [{
            label: 'a',
            name: 'a'
        },
        {
            label: 'b',
            name: 'b'
        },
        {
            label: 'c',
            name: 'c'
        },
    ]
    function findFun (value) {
        for (let i = 0; i < data.length; ++i) {
            if (data[i].label=== 'a' && data[i].name === value) {
                return data[i];
            }
        }
    }
    //after
    newData = data.find(data => data.label === 'a' && data.name === 'a');
    console.log(newData ); // { label : 'a', name: 'a' }
  • 相关阅读:
    vue echarts 遇到的bug之一 无法渲染的问题
    前端SSR方案调研
    【读书笔记】数据结构与算法js描述-链表实现
    【转发】数组,字符串常用方法
    【转】README.md 语法汇总
    webpack 配置遇到的坑
    原生audio 实现音频播放器功能
    活动抽奖组件设计
    理解vue-loader
    kpi sql 积累
  • 原文地址:https://www.cnblogs.com/WoAiZmm/p/14919780.html
Copyright © 2011-2022 走看看