A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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。这,就是深克隆的简单方法

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马