剛剛在作一個>九宮格遊戲的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程序員學習,供參考,謝謝!對象