JavaScript对象:以字符串形式按名称访问变量属性
如果我有一个如下所示的javascript对象JavaScript对象:以字符串形式按名称访问变量属性,javascript,object,Javascript,Object,如果我有一个如下所示的javascript对象 var columns = { left: true, center : false, right : false } 我有一个传递对象和属性名的函数,如下所示 //should return false var side = read_prop(columns, 'right'); read_prop(object,property)的主体是什么样子的?您不需要函数,只需使用: 这等于,var side=columns.right
var columns = {
left: true,
center : false,
right : false
}
我有一个传递对象和属性名的函数,如下所示
//should return false
var side = read_prop(columns, 'right');
read_prop(object,property)
的主体是什么样子的?您不需要函数,只需使用:
这等于,var side=columns.right
,除了使用括号表示法时,右
也可能来自变量、函数返回值等
如果您需要一个函数,请参见:
function read_prop(obj, prop) {
return obj[prop];
}
要回答以下一些与原始问题没有直接关系的注释,可以通过多个括号引用嵌套对象。如果有这样的嵌套对象:
var foo = { a: 1, b: 2, c: {x: 999, y:998, z: 997}};
您可以访问c
的属性x
,如下所示:
var cx = foo['c']['x']
如果某个属性未定义,则尝试引用该属性将返回未定义
(不是null
或false
):
由于上面的答案帮助了我的项目(我问了一个重复的问题,并在这里被引用),我在var中嵌套时提交了括号表示法的答案(我的测试代码):
函数显示文件(whatOption、whatColor){
var Test01={
矩形:{
红色:“矩形文件”,
蓝色:“矩形蓝色文件”
},
正方形:{
红色:“SquareRedFile”,
蓝色:“SquareBlueFile”
}
};
var filename=Test01[whatOption][whatColor];
警报(文件名);
}
[Rec red]
[Sq blue]
[Sq red]
ThiefMaster的答案是100%正确的,尽管我遇到了一个类似的问题,我需要从嵌套对象(对象中的对象)中获取属性,因此作为他的答案的替代方案,您可以创建一个递归解决方案,允许您定义一个术语来获取任何属性,而不管其深度如何:
function fetchFromObject(obj, prop) {
if(typeof obj === 'undefined') {
return false;
}
var _index = prop.indexOf('.')
if(_index > -1) {
return fetchFromObject(obj[prop.substring(0, _index)], prop.substr(_index + 1));
}
return obj[prop];
}
其中,对给定属性的字符串引用引用引用了property1.property2
如果
prop
字符串将包含数组索引,则。中的代码和注释将不起作用,如下所示?访问嵌套属性可以做得简单得多,检查一下也许这是不言而喻的,但我认为有必要明确指出,prop
必须是string
类型,或者解析为string
。这很明显……那么嵌套对象呢?如果属性不存在会发生什么?它是否返回未定义?@BluE:测试不是更容易吗?;)是,访问未定义的属性将返回未定义的
。
foo['c']['q'] === null
// returns false
foo['c']['q'] === false
// returns false
foo['c']['q'] === undefined
// returns true
function fetchFromObject(obj, prop) {
if(typeof obj === 'undefined') {
return false;
}
var _index = prop.indexOf('.')
if(_index > -1) {
return fetchFromObject(obj[prop.substring(0, _index)], prop.substr(_index + 1));
}
return obj[prop];
}