黑马程序员技术交流社区

标题: {} == {} 解释:两个女朋友不可能一样 [打印本页]

作者: 大蓝鲸小蟀锅    时间: 2018-7-20 20:47
标题: {} == {} 解释:两个女朋友不可能一样
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://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2