全國(guó)咨詢(xún)/投訴熱線:400-618-4000

首頁(yè)技術(shù)文章正文

{} == {} 解釋?zhuān)簝蓚€(gè)女朋友不可能一樣

更新時(shí)間:2018-08-03 來(lái)源:黑馬程序員 瀏覽量:

js中的數(shù)據(jù)類(lèi)型是什么? 有人可能會(huì)說(shuō),string、number、boolean、null、undefined。。。這并沒(méi)有毛病,但我想說(shuō),js只有基本數(shù)據(jù)類(lèi)型和復(fù)雜數(shù)據(jù)類(lèi)型。
今天,我們來(lái)研究一下[] 和 []、{}和{}。首先思考一下,'' == ''? 空字符串等于空字符串?  []==[]?空數(shù)組等于空數(shù)組?
我們知道復(fù)雜數(shù)據(jù)類(lèi)型會(huì)在堆內(nèi)存中開(kāi)辟一塊空間去存放,并用一個(gè)地址指向它,用代碼來(lái)表示就是 
var a = [1,2,3];
var b = a;
b.push(4) 
console.log(b) // [1,2,3,4]
這時(shí)候我們打印
console.log(a)  // [1,2,3,4]
這就是復(fù)雜類(lèi)型的一個(gè)小練習(xí)題了。
怎么去解決呢,其實(shí)我們只需知道,只要a、b不是指向一個(gè)內(nèi)存地址就ok了。在數(shù)組的方法中,有些方法會(huì)返回一個(gè)新的數(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]
這就算是一個(gè)簡(jiǎn)單的淺克隆了。關(guān)于深克隆,例如:
var data = [
     { name: 'zs', age:3 },
     { name: 'ls', age:4 },
     { name: 'ww', age:5 },]
深克隆最簡(jiǎn)單的解決方法就是,將data轉(zhuǎn)換成字符串,因?yàn)槲覀冎烂總€(gè)字符串都在單獨(dú)的一個(gè)內(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就又是另一個(gè)data了,但是改變obj又不會(huì)影響原來(lái)的data。這,就是深克隆的簡(jiǎn)單方法


作者:黑馬程序員前端與移動(dòng)開(kāi)發(fā)培訓(xùn)學(xué)院
首發(fā):http://web.itheima.com/
分享到:
在線咨詢(xún) 我要報(bào)名
和我們?cè)诰€交談!