2012-04-29 78 views
0

我有一個JavaScript對象這樣的JavaScript如何使用一個變量引用一個對象

var obj={ 
    a:{x: "someValue", y:"anotherValue"}, 
    b:{x: "bValue", y:"anotherbValue"} 
}; 

,我試圖像這樣引用它

function(some_value){ 
    alert("some_value is " + some_value + " with type " + typeof some_value); 
    // prints some_value is a with type string 
    var t; 
    t=obj[some_value]["x"]; // doesn't work 
    some_value="a"; 
    t=obj[some_value]["x"]; // this does work 
    t=obj["a"]["x"];  // and so does this 
} 

我真的想了解什麼是去這裏。理想情況下,我想引用我 對象與傳遞給函數的值。 感謝

+0

對不起,有一個錯字 - 實際代碼中最後一個對象沒有兩個雙引號 – sferret 2012-04-29 01:43:50

+3

您可以編輯您的問題。 http://stackoverflow.com/posts/10369028/edit – 2012-04-29 01:44:12

+1

如果'some_value'確實' 「一個」','然後T = OBJ [SOME_VALUE] [ 「×」];'將工作。 – 2012-04-29 01:46:21

回答

1

我只能假設你的變量some_value不得包含價值a。它可能有多餘的空白字符。

+0

1好像它可能是一個空白問題由'alert'的輸出判斷。 – 2012-04-29 01:47:43

+0

是的,這是它 - 謝謝你,至少我不會忘了再次檢查,因爲我一直在用它擺弄的年齡。 – sferret 2012-04-29 15:08:55

0

在JS,當屬性不存在,它返回一個undefined。在下面的代碼的情況下,如果包含在變量some_value值不存在爲obj屬性,t是不確定的

//if some_value is neither a nor b 
t = obj[some_value] // t === undefined 

,如果你嘗試從undefined值提取屬性,瀏覽器報告錯誤:

//if some_value is neither a nor b 
t = obj[some_value]["x"] // error 

在嘗試使用hasOwnProperty()訪問它之前,您可以檢查屬性的存在。

if(obj.hasOwnProperty(somevalue)){ 
    //exists 
} else { 
    //does not exist 
} 

你可以做一個「鬆散檢查」,但它並不可靠,因爲任何事情「falsy」將它稱爲「子虛烏有」即使有一個值。

if(obj[somevalue]){ 
    //is truthy 
} else { 
    //obj[somevalue] either: 
    //does not exist 
    //an empty string 
    //a boolean false 
    //null 
    //anything "falsy" 
} 
+0

感謝,我用你的建議hasOwnProperty,並發現它返回false,SOME_VALUE =「my_lookup_value」空白! Ahggg – sferret 2012-04-29 15:13:14

相關問題