js中的數(shù)據(jù)類型是什么? 有人可能會說,string、number、boolean、null、undefined。。。這并沒有毛病,但我想說,js只有基本數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)類型。
今天,我們來研究一下[] 和 []、{}和{}。首先思考一下,'' == ''? 空字符串等于空字符串? []==[]?空數(shù)組等于空數(shù)組?
我們知道復(fù)雜數(shù)據(jù)類型會在堆內(nèi)存中開辟一塊空間去存放,并用一個地址指向它,用代碼來表示就是
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]
這就是復(fù)雜類型的一個小練習(xí)題了。
怎么去解決呢,其實(shí)我們只需知道,只要a、b不是指向一個內(nèi)存地址就ok了。在數(shù)組的方法中,有些方法會返回一個新的數(shù)組,例如: 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]
這就算是一個簡單的淺克隆了。關(guān)于深克隆,例如:
var data = [
{ name: 'zs', age:3 },
{ name: 'ls', age:4 },
{ name: 'ww', age:5 },]
深克隆最簡單的解決方法就是,將data轉(zhuǎn)換成字符串,因?yàn)槲覀冎烂總€字符串都在單獨(dú)的一個內(nèi)存中,互不影響。
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。這,就是深克隆的簡單方法
作者:
黑馬程序員前端與移動開發(fā)培訓(xùn)學(xué)院首發(fā):
http://web.itheima.com/