• JS框架设计读书笔记之-函数


    这次写一些函数

    1.模拟Object.keys方法

    Object.keys = Object.keys || function(obj){
      var a = [];
      // a[0],a[1]...分别赋值为obj的键
      for(a[a.length] in obj);
      return a;
    }

    2.repeat/字符串复制

    function repeat(target,n){
      var s = target,total = '';
      while(n > 0){
        if(n % 2 == 1){
          total += s;
        }
        if(n == 1){
          break;
        }
        s += s;
        n >>= 1;
      }
      return total;
    }
    repeat('abc',3);    //abcabcabc

    3.byteLen/计算字节数

    function byteLen(target){
      // 现获取字符串的长度
      var byteLength = target.length,i = 0;
      for(;i<target.length;i++){
        // 半角字符码在0-255 大于255长度就+1
        if(target.charCodeAt(i) > 255){
          byteLength++;
        }
      }
      return byteLength;
    }

    4.truncate/字符串截取

    function truncate(target,length,truncation){
      //参数修正
      length = length || 30;
      trunction = trunction === undefined ? '...' : trunction;
      return target.length > length ? 
        target.slice(0,length-trunction.length) + trunction : String(target);
    }

    5.trim/去除字符串两端空白

    function trim(str){
      return str.replace(/^s+|s+$/g,'');
    }

    6.shuffle/打乱数组

    function shuffle(arr){
      var j, x, i = arr.length;
      for(; i > 0;){
        // 从最后一个元素开始 进行随机交换
        j = parseInt(Math.random()*i);
        x=arr[--i];
        arr[i]=arr[j];
        // 保证元素不丢失
        arr[j]=x;
      }
      return target; 
    }

    7.flatten/平坦化

    function flatten(arr){
      var result = [];
      arr.forEach(function(item){
        if(Array.isArray(item)){
          // 碰到数组进行递归
          result = result.concat(flatten(item));
        }
        else{
          // 元素依弹入数组
          result.push(item);
        }
      });
      return result;
    }

    8.函数劫持

    // IE6,IE7下unshift不返回数组长度
    // 先进行判断
    if([].unshift(1)!==1){
      var _unshift = Array.prototype.unshift;
      Array.prototype.unshift = function(){
        _unshift.apply(this,arguments);
        // 仅仅修正返回值
        return this.length;
      }
    }
    老子要日穿V8引擎
  • 相关阅读:
    Iscroll4使用心得 (转)
    请求接口数据实例
    jQuery插件开发全解析(转)
    js中可以改变作用域的三种方式(改变this)
    this基础(转)
    Hash扫盲
    JS编码解码 (转)
    自定义菜单实例
    DOM(转)
    js扫盲
  • 原文地址:https://www.cnblogs.com/QH-Jimmy/p/6436120.html
Copyright © 2020-2023  润新知