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

Hai*_*ood 368 javascript object

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

var columns = {
  left: true,
  center : false,
  right : false
}
Run Code Online (Sandbox Code Playgroud)

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

//should return false
var side = read_prop(columns, 'right');
Run Code Online (Sandbox Code Playgroud)

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

Thi*_*ter 697

您不需要它的功能 - 只需使用括号表示法:

var side = columns['right'];
Run Code Online (Sandbox Code Playgroud)

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

如果您需要它的功能,这里是:

function read_prop(obj, prop) {
    return obj[prop];
}
Run Code Online (Sandbox Code Playgroud)

  • 也许这不言而喻,但我认为值得明确指出`prop`必须是`string`类型,或者解析为`string`. (14认同)
  • 什么是嵌套对象? (13认同)
  • @BluE:测试不是更容易吗?;) 是的,访问*未定义*属性会返回“未定义”。 (2认同)
  • 为了答案的完整性,我认为最好在答案中添加有关不存在的 prop 和“未定义”的信息。提出这个问题的人很可能不知道在这种情况下会返回什么。 (2认同)

Pru*_*rus 74

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];
}
Run Code Online (Sandbox Code Playgroud)

您对给定属性的字符串引用重新合并的位置 property1.property2

JsFiddle中的代码和注释.

  • 比如这个?http://jsfiddle.net/amofb8xa/8/ (3认同)
  • 如果`prop` 字符串将包含数组索引,这将不起作用 (2认同)

小智 9

由于我通过上面的答案得到了我的项目帮助(我问过一个重复的问题并在这里提到),我在var中嵌套时提交了一个用于括号表示的答案(我的测试代码):

<html>
<head>
  <script type="text/javascript">
    function displayFile(whatOption, whatColor) {
      var Test01 = {
        rectangle: {
          red: "RectangleRedFile",
          blue: "RectangleBlueFile"
        },
        square: {
          red: "SquareRedFile",
          blue: "SquareBlueFile"
        }
      };
      var filename = Test01[whatOption][whatColor];
      alert(filename);
    }
  </script>
</head>
<body>
  <p onclick="displayFile('rectangle', 'red')">[ Rec Red ]</p>
  <br/>
  <p onclick="displayFile('square', 'blue')">[ Sq Blue ]</p>
  <br/>
  <p onclick="displayFile('square', 'red')">[ Sq Red ]</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)