2012-03-30 130 views
3
var data = {}; 


.... 

data[someprop][someotherprop] = 'bla bla' 

我得到無法設置屬性爲對象

Uncaught TypeError: Cannot read property ... of undefinedCannot set property of...

是的,對象不具有這些屬性..yet,但我將它們設置在該行地方我得到錯誤哈哈。那麼,那是怎麼回事?

+1

我認爲問題在於你試圖在一個對象中設置一個屬性,這個對象本身就是一個還不存在的屬性。如果你嘗試在一行中創建'someprop',然後在其中設置'someotherprop',會發生什麼? – 2012-03-30 10:27:19

+0

請顯示實際的代碼。此外,在尚不存在的屬性中設置屬性將不起作用。你必須首先設置'someprop' – 2012-03-30 10:27:47

回答

1

如果somepropsomeotherprop是變量,理查德·D的答案是正確的,如果他們是硬編碼的字符串,你可以這樣寫你的代碼:

var data = {someprop:{someotherprop: 'value'}}; 

但是,如果它們存儲在變量的值,你真的 - 真的想所有東西都塞進一個單一的線,嘗試這樣的事情:

var data = {window.someprop : {window.someotherprop: 'value'}}; 

其中窗口可以被替換任何物體,如果someprop值本身是一個對象的屬性:

var data = {someForm.name : { formElement.name : formElement.value}}; 

或者jQuery的對象,因爲你的標籤建議你使用jQuery:

var data= {$('#formId').attr('name'):{$('#formSelect').attr('name'): $('#formSelect').val()}}; 

注意:不推薦使用jQuery示例,因爲id選擇器在同一元素上使用兩次。 jQuery將兩次掃描DOM樹,所以你最好將你的#formSelect元素存儲在某個變量中。

6

您正嘗試將屬性分配給對象不存在,運行語句相當於

data.someprop.someotherprop解析器將不會自動創建data.someprop你,因此錯誤。

您必須初始化someprop

data.someprop = {}; 
data['someprop']['someotherprop'] = 'gw ganteng'; 
3

您需要設置不同勢步的屬性是這樣的:

var data = {}; 


data[someprop] = {}; 
data[someprop][someotherprop] = 'bla bla'; 

對象數據將不會有一個屬性名爲「someprop」你asssign前它。

+0

你需要在屬性名稱周圍加引號,否則代碼仍然不起作用。見[這個jsFiddle](http:// jsfiddle。net/zXETB/4 /) – 2012-03-30 10:34:40

1

您需要創建data[someprop]第一:

var data = {}; 
data[someprop] = {}; 
data[someprop][someotherprop] = 'bla bla' 

http://jsfiddle.net/infernalbadger/zXETB/

+0

答案中的代碼和jsFiddle中的代碼不相同。取出屬性名稱的引號會導致Javascript錯誤。 – 2012-03-30 10:30:59

+0

@AnthonyGrist我知道。我假設'someprop'和'somepotherprop'設置在某個地方。 – 2012-03-30 10:39:50

3
var data = {}; 
data[someprop] = {someotherprop:'bla bla'}; 

否則data[someprop]將不確定

+0

var data = {someprop:{someotherprop:'bla bla'}}; :) – sasjaq 2012-03-30 10:39:20

相關問題