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

时间:2023-03-09 17:38:10
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;
}
}