2010-11-16 119 views
5

我在Chrome中遇到了一個奇怪的錯誤...查看下面的截圖。不能設置屬性...的undefined ---奇怪

我使用對象字面值語法定義記錄。

我嘗試設置「id」屬性並獲取異常。

我都試過:

record['id'] = 'wtf'; 

record.id = 'wtf'; 

我在腳本中使用這種類型的語法的所有的地方....什麼可以怎麼回事? 這是Chrome中的錯誤嗎?

alt text

編輯: 我已經解決了這個問題,現在,但我仍然不知道爲什麼會這樣。 我將記錄的定義移到了if塊之外。任何人都知道會發生什麼?我認爲所有變量聲明都是函數的範圍,因此這不應該成爲問題。

+0

我無法重現錯誤(在Mac上的Chrome 7和Firefox上)。從這裏的信息和屏幕截圖可以看出,你的代碼沒有問題。 「錯誤」行之前的「記錄」的價值是什麼? – nickf 2010-11-16 18:12:26

回答

15

問題很可能是dl小於或等於零,因此初始化record的語句沒有得到執行。從縮進看起來,您希望兩個語句都成爲if塊的一部分,但沒有大括號,無論如何,record['id'] = 'wtf';語句都會執行。

通過在if語句之外移動變量初始值,你可以在任何情況下強制它發生,並將if語句塊中的賦值移動(我假設你是想要的)。

可能是一個更好的辦法來解決它添加括號這樣的:

if (dl > 0) { 
    var record = {}; 

    record.id = 'wtf'; 
} 

除非你確實想在這兩種情況下初始化record

您將可變聲明正確正在作用域的功能,但是,直到你得到的代碼點分配不會發生。 record在範圍內,但它的默認值仍然爲undefined,因爲您尚未向其分配任何內容。

+0

哇。一些錯誤是自我造成的。好的趕上! – rvandervort 2010-11-16 20:29:27

0

適合我,沒有理由它不應該工作。你確定它指的是確切的路線嗎?如果你在設置之前alert(record)怎麼辦?你有沒有試過調試它?

+0

其實,我想我剛剛解決了這個問題......但我仍然不確定爲什麼會發生這種情況。我移動了if-block之外的記錄定義,它似乎能夠工作......我將更新主要問題。 – rvandervort 2010-11-16 18:12:20

+0

@rvandervort:如果你確實發現原因,一定要分享理由! – nickf 2010-11-16 18:13:02