这次写一些函数

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

JS框架设计读书笔记之-函数的更多相关文章

  1. JS框架设计读书笔记之-核心模块

    随笔记录一下读书心得 1. 框架模块-核心模块 该模块是框架最先执行的部分,jQuery与vue中都有初始化的代码. 模块的功能主要是:对象扩展.数组化.类型判定.事件绑定和解绑.无冲突处理.模块加载 ...

  2. JS框架设计读书笔记之-动画

    基础概念 CSS样式可分为两种,一种值接近无限的集合(color,width),一种值只有几种(display),可以进行计算的样式,产生了动画效果.\ 1. 动画的第一步是获得元素的精确样式值. 2 ...

  3. JS框架设计读书笔记之-节点模块

    节点的创建 浏览器提供了多种手段创建API,从流行程度依次是document.createElement.innerHTML.insertAdjacentHTML.createContextualFr ...

  4. JS框架设计读书笔记之-选择器引擎01

    选择符 选择符是指CSS样式规则最左边的部分,例如 p{},#id{},.class{},p.class{} 等等 总共可以分为四大类: 并联选择器 => 逗号 => $('div,spa ...

  5. JS框架设计读书笔记之-异步

    setTimeout/setInterval 1. 如果回调执行时间大于间隔时间,真正的间隔时间会大一些. 2. 存在一个最小的时间间隔,即使seTimeout(fn,0),在IE6-IE8中大概为1 ...

  6. JS框架设计读书笔记之-选择器引擎02

    选择器引擎涉及相关概念 概念 以Sizzle的主函数声明为例,来说明引擎的相关概念. function Sizzle(selector, context, results, seed) { //... ...

  7. JS框架设计读书笔记之-小知识

    这一篇写一点小知识 JS中0.1+0.2为什么不等于0.3? 关于这个问题之前也很疑虑,老师也只是笼统的讲这是JS的语言问题,但是内部具体的情况却没有讲,看了书才发现原理如此简单. 简单来讲,计算机识 ...

  8. javascript框架设计(读书笔记)

    我觉得多看几本进阶的书 与其十本书读一遍,不如一本书读十遍 读书的启示: 读好书(看推荐) 精读(重复看) 能读厚书(javascript权威指南) Object.keys Object.keys=O ...

  9. js框架设计1.1命名空间笔记

    借到了司徒正美的写的js框架设计一书,司徒大神所著有些看不太懂,果然尚需循序渐进,稳扎js基础之中. 第一张开篇司徒阐述了种子模块的概念 种子模块亦为核心模块,框架最先执行模块,司徒见解应包含:对象扩 ...

随机推荐

  1. temp-存储过程 以前的

    ---------------------------------------------------------------------------------------------------- ...

  2. Spring c3p0连接池无法释放解决方案

    通过c3p0配置连接池的时候,在进行压力测试的时候,日志出现了这样一个错误:Data source rejected establishment of connection, message from ...

  3. Java中迭代器Iterator的使用

    Java集合类中Map接口下的相关类并没有像Collection接口的相关类一样实现get()方法,因此在要实现遍历输出的场景中没法直接用get()方法来取得对象中的数据,但Java本身提供了另一种遍 ...

  4. 我的Spring学习记录(四)

    虽然Spring管理这我们的Bean很方便,但是,我们需要使用xml配置大量的Bean信息,告诉Spring我们要干嘛,这还是挺烦的,毕竟当我们的Bean随之增多的话,xml的各种配置会让人很头疼. ...

  5. 跨主机使用 Rex-Ray volume - 每天5分钟玩转 Docker 容器技术(77)

    上一节我们在 docker1 上的 MySQL 容器中使用了 Rex-Ray volume mysqldata,更新了数据库.现在容器已经删除,今天将演示在 docker2 中重新使用这个卷. 在 d ...

  6. IIS7中JS、CSS、Image无法显示和加载解决方案

    前两天把机器从Windows7升级到Windows10,IIS也跟着升级了,在获取项目搭载IIS上发现原有的页面中所有的JS.CSS.Image都无法访问,提示500错误,起初以为是IIS没有装好 重 ...

  7. Python实战之Selenium自动化测试web登录(2)

    #!/usr/bin/env python3 # -*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver ...

  8. linux下rename用法--批量重命名

    Linux的rename 命令有两个版本,一个是C语言版本的,一个是Perl语言版本的,早期的Linux发行版基本上使用的是C语言版本的,现在已经很难见到C语言版本的了, 由于历史原因,在Perl语言 ...

  9. python中ConfigParse模块的用法

    ConfigParser 是Python自带的模块, 用来读写配置文件, 用法及其简单. 配置文件的格式是: [...]包含的叫section section 下有option=value这样的键值 ...

  10. 动态IP解析

    本文介绍两种方便获取主机动态IP的方式(DDNS,IP报告网页),并给出相应的代码实现. shell脚本获取本机IP,执行上传操作和更新DNS操作.定期执行通过crontab或者systemd等服务. ...