我在NodeJS上遇到了一個非常奇怪的JavaScript錯誤。「無法讀取''未定義的屬性,即使它已被定義
我有一個巨大的data.json文件(24MB)。我通過
閱讀var data = JSON.parse(fs.readFileSync("./data.json", 'utf8'));
然而,在腳本執行過程中的某個時刻,我嘗試訪問,例如,
data['someProp']['prop1']
和它提出了一個錯誤類型:
TypeError: Cannot read property 'prop1' of undefined
這真的很奇怪,因爲data
,data['someProp']
,data['someProp']['prop1']
都被定義了。
如果我做
console.log(data['someProp']['prop1']);
它顯示在屏幕正確上的data['someProp']['prop1']
價值,並立即引發一個類型錯誤。
什麼可能會導致這種奇怪的行爲?任何猜測或提示來解決這樣的問題?
更新:
讓我更清楚一點。我覺得很奇怪,因爲如果我把
console.log(data['someProp']['prop1']);
在該行剛好高於其引發的錯誤,它正確打印出的價值,並立即引發錯誤。我們假設data['someProp']['prop1'] = "someProp value"
。
然後這是錯誤日誌。
someProp value
console.log(data['someProp']['prop1']);
^
TypeError: Cannot read property 'prop1' of undefined
所以,如果我做
console.log(data['someProp'])
那麼這是日誌我得到:
{
...
"someProp": {
"prop1": "someProp value"
},
...
}
undefined
這是我感到困惑的部分。當我console.log它時,它打印出data['someProp']
的內容,然後立即輸出undefined
。什麼會導致這種情況?
另一個奇怪的是
console.log(typeof data['someProp']);
結果是:
object
undefined
如何data['someProp']
一併對象作爲undefined
?
*「...在腳本執行過程中的某個時候......」*那好像是關鍵,不是。如果它告訴你它是'未定義的',那麼這意味着它是'未定義的'。無論是在定義代碼之前運行代碼,還是錯誤地訪問屬性。無論哪種方式,無法從您提供的內容中知道問題。 –
看看這個問題,它有一個函數調用n個級別的屬性,如果它爲空則返回空字符串。 http://stackoverflow.com/questions/13345449/calling-object-properties-in-n-levels-javascript –
@ user1689607你能看看我更新的問題嗎?我很困惑,因爲console.log正確顯示值,並立即抱怨它未定義。我想知道這是否是由data.json文件中的一些損壞的文本編碼引起的。但這只是我的猜測。 –