我有一个像这样的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 :(得分:1)
我只能假设您的变量some_value
不得包含值a
。它可能有额外的空格字符。
答案 1 :(得分: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
}
你可以做一个“宽松的检查”,但它不可靠,因为任何“假”都会称之为“不存在”,即使有价值。
if(obj[somevalue]){
//is truthy
} else {
//obj[somevalue] either:
//does not exist
//an empty string
//a boolean false
//null
//anything "falsy"
}