JS數組的引用問題

剛剛在作一個>九宮格遊戲的js算法。調了很長時間,原來有一個致命的錯誤,忘了js數組的引用。程序員

原來只知道對象是引用的。算法

var a = {};//a就是一個對象chrome

var a = [];//a是一個數組數組

var a = [2];
var b = a;
b[0] = 100;
alert(a[0]); //alert出來後結果居然是100,而我並無改變a數組的值,這時我想到了引用。

var a = [2];
var b = a;
b = [100];
alert(a[0]);//這時alert出來就是2了。這和上面又有區別,b也對a產生了引用,能夠我不是經過b的下標來賦值,就沒有改變a的值了。
b[0] = 99;
alert(a[0]); //這時a[0]也沒有改變,於是能夠知道上面對b的賦值改變了b對a的引用關係。

下面這段代碼還更有趣dom

var a = [2];
b = a;
b[0] = a;
alert(a[0]);//這時候alert出來是空值,不緣由,繼續alert
alert(a.length);//這時長度是1,說明a是一個數組,繼續alert
alert(typeof a[0]); //這時chrome alert出來是 object,繼續alert
alert(a[0][0][0][0][0][0][0][0].length);//這時長度仍是1

爲何我能夠一直在a後面取鍵值0呢。原來b[0]=a就是改變了a[0]的引用,a[0]->a ,a[0]就指向a的地址了,繼續[0]仍是指向a,這就是一個循環了。學習

其實在js裏面,要特別注意引用,數組,對象,dom對象都是引用,一不當心程序bug就來了。code

   本文適合中級js程序員學習,供參考,謝謝!對象

相關文章
相關標籤/搜索