Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript对象:以字符串形式按名称访问变量属性_Javascript_Object - Fatal编程技术网

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

如果我有一个如下所示的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
,除了使用括号表示法时,
也可能来自变量、函数返回值等

如果您需要一个函数,请参见:

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];
}