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;
  }
}

 

posted @ 2017-02-23 23:32  书生小龙  阅读(353)  评论(0编辑  收藏  举报