2016-04-26 51 views
1

我有一些JavaScript從數組中抓取座標。Js獲取未捕獲TypeError:無法讀取未定義的屬性,但仍然工作

我得到的錯誤是檢索變量的右側和左側座標。

該錯誤是

Uncaught TypeError: Cannot read property 'rightX' of undefined 

代碼是

var notesArray = ["A","Bf","B","C","Cs","D","Ef","E","F","Fs","G","Gs"]; 

notesArray["A"] = {leftX : 0, rightX : 320, topY : 0, bottomY : 240, color : "#ffffff"}; 
notesArray["Bf"] = {leftX : 0, rightX : 320, topY : 240, bottomY : 480, color : "#ffffff"}; 
notesArray["B"] = {leftX : 320, rightX : 640, topY : 0, bottomY : 240, color: "#ffffff"}; 
notesArray["C"] = {leftX : 0, rightX : 320, topY : 480, bottomY : 720, color: "#ffffff"}; 
notesArray["Cs"] = {leftX : 320, rightX : 640, topY : 240, bottomY : 480, color: "#ffffff"}; 
notesArray["D"] = {leftX : 640, rightX : 960, topY : 0, bottomY : 240, color: "#ffffff"}; 
notesArray["Ef"] = {leftX : 320, rightX : 640, topY : 480, bottomY : 720, color: "#ffffff"}; 
notesArray["E"] = {leftX : 640, rightX : 960, topY : 240, bottomY : 480, color: "#ffffff"}; 
notesArray["F"] = {leftX : 960, rightX : 1280, topY : 0, bottomY : 240, color: "#ffffff"}; 
notesArray["Fs"] = {leftX : 640, rightX : 960, topY : 480, bottomY : 720, color: "#ffffff"}; 
notesArray["G"] = {leftX : 960, rightX : 1280, topY : 240, bottomY : 480, color: "#ffffff"}; 
notesArray["Gs"] = {leftX : 960, rightX : 1280, topY : 480, bottomY : 720, color: "#ffffff"}; 

... 

// do something in here 
var n = (note.slice(0,2)) ? note.slice(0,2) : "D" ; 

x = Math.floor(Math.random() * (notesArray[n].rightX - notesArray[n].leftX + 1)) + notesArray[n].leftX; 
y = Math.floor(Math.random() * (notesArray[n].bottomY - notesArray[n].topY + 1)) + notesArray[n].topY; 

n個可變和notesArray [N]的控制檯日誌.rightX

enter image description here 因此,它是得到數字,它是它正在查找的任何變量的rightX的座標,並且實際上正在工作operly。我的問題是,爲什麼(或如何)拋出這個錯誤,但返回正確的座標,無論如何修復我的代碼,所以它不會拋出錯誤?

+0

我可能會丟失這個,但是'note'是什麼定義的? – War10ck

+0

您的第一行將'notesArray'初始化爲一個數組。但接下來的12行分配給屬性,就好像它是一個對象。雖然允許數組擁有屬性,但這是一種不常見的模式,我懷疑這不是您真正想要的。 – Barmar

+0

發生這種情況時'n'的值是多少? – Barmar

回答

1

我意識到,單一的信中注意到其中的人造成錯誤,因爲它一直在尋找的東西,有兩個字符,並且每當單個字母變量進入時必須一直拋出錯誤。
將「A」,「B」,「c」等轉換爲「An」,「Bn」,「Cn」等。 修復。

0

看看2控制檯日誌。 方括號之間是數組鍵,而不是數組值。 這意味着這個notesArray["A"]其實這notesArray[0]

var notesArray = ["A","Bf","B","C","Cs","D","Ef","E","F","Fs","G","Gs"]; 
 
console.log(notesArray[0]); 
 
console.log(notesArray["A"]);

是爲了方便在尋找下一個操作步驟。 如果你還是想用notesArray["A"],定義和空數組,比指定鍵值對,是這樣的:notesArray["A"] = "A"

相關問題