首頁技術文章正文

{} == {} 解釋:兩個女朋友不可能一樣

更新時間:2018-08-03 來源:黑馬程序員 瀏覽量:

js中的數(shù)據(jù)類型是什么? 有人可能會說,string、number、boolean、null、undefined。。。這并沒有毛病,但我想說,js只有基本數(shù)據(jù)類型和復雜數(shù)據(jù)類型。
今天,我們來研究一下[] 和 []、{}和{}。首先思考一下,'' == ''? 空字符串等于空字符串?  []==[]?空數(shù)組等于空數(shù)組?
我們知道復雜數(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]
這就是復雜類型的一個小練習題了。
怎么去解決呢,其實我們只需知道,只要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]
這就算是一個簡單的淺克隆了。關于深克隆,例如:
var data = [
     { name: 'zs', age:3 },
     { name: 'ls', age:4 },
     { name: 'ww', age:5 },]
深克隆最簡單的解決方法就是,將data轉(zhuǎn)換成字符串,因為我們知道每個字符串都在單獨的一個內(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ā)培訓學院
首發(fā):http://web.itheima.com/
分享到:
在線咨詢 我要報名
和我們在線交談!