能够转换为字符串来判断。举例:javascript
obj = { a: 1, b: 2 } obj2 = { a: 1, b: 2 } obj3 = { a: 1, b: '2' } JSON.stringify(obj) == JSON.stringify(obj2);//true JSON.stringify(obj) == JSON.stringify(obj3);//false
在调用 new 操做符的过程当中,执行了如下四个步骤:
let obj = new Object(); let Con = [].shift.call(arguments); obj.__proto__ = Con.prototype
3.绑定 this: apply;
4.返回新对象;java
用一句话来讲就是:数组
new 操做符新建了一个空对象,这个对象原型指向构造函数的prototype,执行构造函数后返回这个对象。
浅拷贝和深拷贝,这里一般是指将一个对象A赋值给另外一个变量B。当A修改的时候,若是B也跟着变化,这个就是浅拷贝,若是B没有变化,这个叫作深拷贝。app
能够经过直接将对象赋值给变量的方式实现浅拷贝。举例:函数
let a = [1, 2, 3]; let b = a; a[0] = 4; b[0] // 4
let a = { age: 1 } let b = Object.assign({}, a) a.age = 2 console.log(b.age) // 1
2.展开运算符。举例:性能
let a = { age: 1 } let b = {...a} a.age = 2 console.log(b.age) // 1
3.JSON方法:this
主要是经过JSON.parse()和JSON.stringify()的搭配来实现深拷贝。举例:
let a = { age: 1, jobs: { first: 'FE' } } let b = JSON.parse(JSON.stringify(a)) a.jobs.first = 'native' console.log(b.jobs.first) // FE
4.jQuery的extend()方法
因为如今项目中用jQuery相对较少,用到的时候能够单独去查该API。
5.递归
这个主要是针对对象的元素不是一维元素,元素自己可能也为对象或者数组,甚至子元素的子元素也是对象或者数组的时候,从根本上去实现深拷贝。prototype