今天看到一道前端js面試題塘安,加深了我對數(shù)組的一些理解拗小。
var arr1 = 'edison'.split('');
var arr2 = arr1.reverse();
var arr3 = 'chan'.split('');
arr2.push(arr3);
console.log('arr1:length='+arr1.length+'? last='+arr1.slice(-1));
console.log('arr2:length='+arr2.length+'? last='+arr2.slice(-1));
一開始我的答案是
arr1:length=6 last='e'(錯(cuò)的)
arr2:length=7 last='c','h','a','n'
但是我錯(cuò)了默责。。。玻靡,因?yàn)榇鸢溉缦拢?/h4>
arr1:length=7? last=c,h,a,n
?arr2:length=7? last=c,h,a,n
我一開始很疑惑,因?yàn)槲依斫獾氖菍?shù)組的變量賦值跟js基礎(chǔ)類型的賦值一樣墩蔓,將一個(gè)數(shù)組變量賦值給另一個(gè)變量I颐А!<榕昏名!。所以導(dǎo)致我arr1的結(jié)果出錯(cuò)阵面。
因?yàn)閷?shí)際正確的是將這兩個(gè)變量指向內(nèi)存堆中的同一個(gè)數(shù)組(淺拷貝)轻局,無論通過改變其中哪一個(gè)變量,實(shí)際都是改的內(nèi)存中的那一個(gè)數(shù)組QⅰB仄恕!
之所以我的結(jié)果錯(cuò)了置鼻,是因?yàn)槲业睦斫馐菍rr1的值copy給了arr2镇饮,如圖:
錯(cuò)的理解
于是,我看到了這樣一段代碼~~~箕母,瞬間理解加深!!!
var a=['q','w','e','r'];
var b=a;
a=['a','s','d','f'];
console.log(b);
有的同學(xué)沒太理解的或者看了我之前的理解的储藐,可能會(huì)以為 b應(yīng)該可能會(huì)是['a','s','d','f'],但是錯(cuò)了K皇恰8撇!
結(jié)果詫異D衾O皆础!