JavaScript 对象:按名称作为字符串访问变量属性

2022-08-29 23:14:27

如果我有一个如下所示的javascript对象

var columns = {
  left: true,
  center : false,
  right : false
}

我有一个函数,它传递了对象,以及一个像这样的属性名称

//should return false
var side = read_prop(columns, 'right');

的身体会是什么样子?read_prop(object, property)


答案 1

你不需要一个函数 - 只需使用括号表示法

var side = columns['right'];

这等于点表示法,除了在使用括号表示法时也可能来自变量,函数返回值等的事实。var side = columns.right;right

如果你需要一个函数,这里是:

function read_prop(obj, prop) {
    return obj[prop];
}

要回答下面一些与原始问题没有直接关系的注释,可以通过多个括号引用嵌套对象。如果你有一个像这样的嵌套对象:

var foo = { a: 1, b: 2, c: {x: 999, y:998, z: 997}};

您可以按如下方式访问 的属性:xc

var cx = foo['c']['x']

如果属性未定义,则尝试引用它将返回(不是或):undefinednullfalse

foo['c']['q'] === null
// returns false

foo['c']['q'] === false
// returns false

foo['c']['q'] === undefined
// returns true

答案 2

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

JsFiddle 中的代码和注释。