首页技术文章正文

{} == {} 解释:两个女朋友不可能一样

更新时间:2018-08-03 来源:黑马程序员 浏览量:

js中的数据类型是什么? 有人可能会说,string、number、boolean、null、undefined。。。这并没有毛病,但我想说,js只有基本数据类型和复杂数据类型。
今天,我们来研究一下[] 和 []、{}和{}。首先思考一下,'' == ''? 空字符串等于空字符串?  []==[]?空数组等于空数组?
我们知道复杂数据类型会在堆内存中开辟一块空间去存放,并用一个地址指向它,用代码来表示就是 
var a = [1,2,3];
var b = a;
b.push(4) 
console.log(b) // [1,2,3,4]
这时候我们打印
console.log(a)  // [1,2,3,4]
这就是复杂类型的一个小练习题了。
怎么去解决呢,其实我们只需知道,只要a、b不是指向一个内存地址就ok了。在数组的方法中,有些方法会返回一个新的数组,例如: concat()、slice().
使用方法:
var a = [1,2,3];
var b = a.concat();  // 使用slice()也可以
b.push(4);
console.log(b)   //  [1,2,3,4]
console.log(a)   //  [1,2,3]
这就算是一个简单的浅克隆了。关于深克隆,例如:
var data = [
     { name: 'zs', age:3 },
     { name: 'ls', age:4 },
     { name: 'ww', age:5 },]
深克隆最简单的解决方法就是,将data转换成字符串,因为我们知道每个字符串都在单独的一个内存中,互不影响。
var  str = JSON.stringify( data );   // '[ { name: 'zs', age:3 }, { name: 'ls', age:4 }, { name: 'ww', age:5 } ]'
var  obj = JSON.parse( str ); 
这样的话,obj就又是另一个data了,但是改变obj又不会影响原来的data。这,就是深克隆的简单方法


作者:黑马程序员前端与移动开发培训学院
首发:http://web.itheima.com/
分享到:
在线咨询 我要报名
和我们在线交谈!