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/