0%

基础版(不能解决循环引用)
基础版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function deepClone(obj){
// 如果参数为空则直接返回,如果为日期/正则 则也直接返回;
if( obj == null ) return obj;
if( obj instanceof Date ) return new Date(obj);
if( obj instanceof RegExp ) return new RegExp(obj);
if(typeof obj !== 'object') return obj;
let cloneObj = new obj.constructor; // 此时是为了获取 obj 的类型, 并且可以根据类型来新建相应的拷贝对象;
// 根据上文的对象类型,来进行填充;
for(let key in obj){
if(obj.hasOwnProperty(key)){ // 过滤掉对象元属性上面的属性;
cloneObj[key] = deepClone(obj[key])
}
}
return cloneObj;
}
阅读全文 »

在一些业务场景会有两个独立函数共同修改一个对象,而我们又不知道对象什么何时完成的时候,就要用回调函数来进行解决。

如:有两个单独文本文件,我们需要获取里面的内容来填充一个对象,我们在填充完成之后来获取对象。

获取文本文件并填充

阅读全文 »

在前端开发的过程中,经常会需要绑定一些持续触发的事件,如 resize、scroll、mousemove 等等,但有些时候我们并不希望在事件持续触发的过程中那么频繁地去执行函数。所以诞生了 防抖与节流函数

防抖(debounce)

所谓防抖,就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。

阅读全文 »

在博客根目录安装搜索插件

1
2
# 安装插件,用于生成博客索引数据(在博客根目录下执行下列命令):
npm install hexo-generator-search --save
阅读全文 »

方法1、arrayObject.slice(start,end) 快速深度复制一个多维数组
关于 slice(start,end)方法说明

参数 描述
start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。
阅读全文 »