0

我有一个像这样的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
}

我真的很想了解这里发生了什么。理想情况下,我想用传递给函数的值来引用我的对象。谢谢

4

2 回答 2

1

我只能假设您的变量some_value不能包含 value a。它可能有额外的空白字符。

于 2012-04-29T01:46:37.457 回答
0

在 JS 中,当一个属性不存在时,它会返回一个undefined. 在以下代码的情况下,如果变量中包含的值some_value不作为属性存在objt则未定义

//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
}

您可以进行“松散检查”,但它不可靠,因为任何“虚假”都会将其称为“不存在”,即使存在价值。

if(obj[somevalue]){
    //is truthy
} else {
    //obj[somevalue] either:
    //does not exist
    //an empty string
    //a boolean false
    //null
    //anything "falsy"
}
于 2012-04-29T01:47:06.637 回答