zoukankan      html  css  js  c++  java
  • js高级写法

     


    名称

    一般写法 优化
    取整(不四舍五入)

    var a='12.534324'

    parseInt(a,10);

    Math.floor(a);

    a>>0;      //12

    ~~a;     //12

    a|0;

    取整(四舍五入)

    var a='12.534324'

    Math.round(a);
    num.toFixed(0)

    a+.5|0;   //13
    未定义

    undefined; 

    void 0;      // 快
    0[0];        // 略慢
    布尔值短写法

    true; 

    !0; 
    串连字符串

    var a='a',b=4,c='c';

    ''+a+b+c; 

    ''.concat(a, b, c);
    字符串截取

    var str='apple'

    str.charAt(0); 

    str[0]
    获取数组是否存在元素 for循环 [1, 2, 3].indexOf(2);

    二、优化嵌套的条件语句

    可优化大量的ifelse  switch语句

    before:

    //method1
         if (color) {
             if (color === 'black') {
                 printBlackBackground();
             } else if (color === 'red') {
                 printRedBackground();
             } else if (color === 'blue') {
                 printBlueBackground();
             } else if (color === 'green') {
                 printGreenBackground();
             } else {
                 printYellowBackground();
             }
         }
     
     
     //method2
         switch(color) {
             case 'black':
                 printBlackBackground();
                 break;
             case 'red':
                 printRedBackground();
                 break;
             case 'blue':
                 printBlueBackground();
                 break;
             case 'green':
                 printGreenBackground();
                 break;
             default:
                 printYellowBackground();
         }
     
     //method3
         switch(true) {
             case (typeof color === 'string' && color === 'black'):
                 printBlackBackground();
                 break;
             case (typeof color === 'string' && color === 'red'):
                 printRedBackground();
                 break;
             case (typeof color === 'string' && color === 'blue'):
                 printBlueBackground();
                 break;
             case (typeof color === 'string' && color === 'green'):
                 printGreenBackground();
                 break;
             case (typeof color === 'string' && color === 'yellow'):
                 printYellowBackground();
                 break;
         }
     

    优化后

     
     //method4
         var colorObj = {
             'black': printBlackBackground,
             'red': printRedBackground,
             'blue': printBlueBackground,
             'green': printGreenBackground,
             'yellow': printYellowBackground
         };
         if (color in colorObj) {
           colorObj[color]();
         }
     

    三、检查某对象是否有某属性

    使用 hasOwnProperty和in

    before:

    var myObject = {
           name: '@tips_js'
        };
    if (myObject.name) { }

    after:

    myObject.hasOwnProperty('name'); // true
    'name' in myObject; // true
     
     myObject.hasOwnProperty('valueOf'); // false, valueOf 继承自原型链
     'valueOf' in myObject; // true

    四、更简单的使用indexOf实现contains功能

    before:

    var someText = 'javascript rules';
     if (someText.indexOf('javascript') !== -1) {
     }

    after:

    !!~someText.indexOf('tex'); // someText contains "tex" - false
    !!~someText.indexOf('java'); // - true

    五、将有length属性的对象转化为数组

    比如带有length属性的自定义对象,NodeList,parameters等。

    转化:

     
    var  arr  = { length : 2 , 0 : 'first' , 1 : 'second' };
    1、Array. prototype . slice . call (arr) //["first", "second"]
    2、Array.from(arr) //
    ["first", "second"]
     

    六、获取DOM元素在父类中的索引

    //html
    
    <ul>
        <li></li>
        <li onclick="getIndex()"></li>
    </ul>
    
    //js
    
    function getIndex() {
      var evt = window.event;
       var target = evt.target;
       return [].indexOf.call(document.querySelectorAll('li'), target);// 返回1
    }
    

      

    七、判断类型  instanceof

    let data = [1]
    console.log(data instanceof Array) // true
    

      

    八、if else 高级写法

    if(a >=5){ 
    alert(“你好”); 
    } 
    可以写成:
    
    a >= 5 && alert("你好");
    代码:var attr = true && 4 && “aaa”; 
    那么运行的结果attr就不是简单的true或这false,而是”aaa”
    代码:var attr = attr || “”;这个运算经常用来判断一个变量是否已定义,如果没有定义就给他一个初始值,这在给函数的参数定义一个默认值的时候比较有用。

      

    出个题:
    假设对成长速度显示规定如下: 
    成长速度为5显示1个箭头; 
    成长速度为10显示2个箭头; 
    成长速度为12显示3个箭头; 
    成长速度为15显示4个箭头; 
    其他都显示都显示0各箭头。 
    用代码怎么实现?
    用if,else:
    var add_level = 0;  
    
    if(add_step == 5){  
        add_level = 1;  
    }  
    else if(add_step == 10){  
        add_level = 2;  
    }  
    else if(add_step == 12){  
        add_level = 3;  
    }  
    else if(add_step == 15){  
        add_level = 4;  
    }  
    else {  
        add_level = 0;  
    }  
    
    稍好些的switch
    
    var add_level = 0;  
    
    switch(add_step){  
        case 5 : add_level = 1;  
            break;  
        case 10 : add_level = 2;  
            break;  
        case 12 : add_level = 3;  
            break;  
        case 15 : add_level = 4;  
            break;  
        default : add_level = 0;  
            break;  
    }  
    如果需求改成: 
    成长速度为>12显示4个箭头; 
    成长速度为>10显示3个箭头; 
    成长速度为>5显示2个箭头; 
    成长速度为>0显示1个箭头; 
    成长速度为<=0显示0个箭头
    那么用switch实现起来也很麻烦了。
    那么你有没有想过用一行就代码实现呢? 
    ok,让我们来看看js强大的表现力吧:
    
    var add_level = (add_step==5 && 1) || (add_step==10 && 2) || (add_step==12 && 3) || (add_step==15 && 4) || 0;   
    
    更强大的,也更优的:
    var add_level={'5':1,'10':2,'12':3,'15':4}[add_step] || 0; 
    
    第二个需求:
    var add_level = (add_step>12 && 4) || (add_step>10 && 3) || (add_step>5 && 2) || (add_step>0 && 1) || 0; 
    

      

    更严谨的写法!!
    !!的作用是把一个其他类型的变量转成的bool类型
    typeof 5  //"number"
    typeof !!5  //"boolean"
    

      

  • 相关阅读:
    C#将List<T>转化为DataTable
    SqlServer常用内置函数
    C#索引器
    验证Textbox的字符长度
    WM消息对应的Message消息中的Lparam和WParam
    对窗体操作的WM消息
    DllImport使用
    C#获取当前路径的七种方法
    注册ActiveX控件
    [转]VS2010中水晶报表安装应用及实例
  • 原文地址:https://www.cnblogs.com/cristina-guan/p/14085878.html
Copyright © 2011-2022 走看看