使用Javascript实现对象浅拷贝和深拷贝

使用Javascript实现对象浅拷贝和深拷贝

对象的浅拷贝与深拷贝

javascript原生里并没有对对象拷贝的函数,要实现对象的拷贝,可以使用以下方法。

浅拷贝

只拷贝对象的值,即将该对象的属性复制给另一个对象,如果对象里面包含另一个对象,只是将引用复制了而已。所以浅拷贝也可以理解为只拷贝一层。

要实现浅拷贝,可以通过遍历将属性赋值给另一个对象,也可以直接使用Object.assign()方法
使用Object.assign()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
let Oa = {
a: 1,
b: 2,
Oc: {
d: 3,
e: 4
}
}

let Ob = Object.assign({}, Oa)
console.log(Ob)
// { a: 1, b: 2, Oc: { d: 3, e: 4 } }
console.log(Ob.Oc === Oa.Oc)
// true

这里Ob的属性Ob.Oc === Oa.Oc即两个对象是相等的,复制的引用

深拷贝

HTML的history API

HTML的history API

HTML 5提供了一个新的API:history,它能够操纵浏览器的历史记录信息

下面就对其进行简单的介绍

es6中Promise.all、Promise.race的实现及其用法

es6中Promise.all、Promise.race的实现及其用法

灵魂配图

在es6中,新增了Promise对象

其中有两个方法

  • Promise.all()
  • Promise.race()

都是用于将多个Promise实例包装成另一个实例

下面我会对两种方法进行介绍,以及自己使用js实现他们的方法

javascript性能优化之debounce与throttle

javascript性能优化之debounce与throttle

消抖(debounce):

  • 当函数被调用后,n秒之后才会触发该函数,如果在此期间函数再次被调用,则重新开始计时,n秒之后才会触发该函数。

其作用是为了避免某个事件在短时间内连续触发从而影响性能,也可用于避免在一定时间内重复提交表单等。

节流(throttle):

  • 函数被调用后,立即触发该函数,在之后的n秒之内不能再次重复触发。

该函数可以用于限制浏览器scroll,mousemove等高频触发事件的触发频率

下面介绍debouncethrottle的实现方式

ES6新特性之Map、Set与WeakMap、WeakSet的区别

ES6新特性之Map、Set与WeakMap、WeakSet的区别

ES6提供了新的数据结构Set,类似于数组,不过里面不会出现重复的值

另外一个是Map,类似于对象,对象只能使用字符串作为键,而Map可以使用任意类型

使用原生JS实现wrap与unwrap

使用原生JS实现wrap与unwrap

jquery中提供了.wrap()与.unwrap()方法
下面介绍一下原生js的实现方法

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×