(术语)如何引用变量中的变量?

时间:2016-11-04 14:08:14

标签: javascript terminology

我需要澄清一些术语,因为现在我的项目在引用变量时会有一些术语混合。

考虑一个像这样定义的对象:

var anObject = {
    a: {
        value1: 1337,
        value2: 69,
        value3: "420 man"
    }
}

如果我错了,请纠正我,但我认为a对象 anObject属性

但是在anObject的背景下,我应该如何引用value1?它是一个"属性"藏汉?

我问的原因是我需要创建函数来访问变量中的变量"对象像这样:

function getProperty(name) {
    // ...
}

var theValueImLookingFor = getProperty("a.value1");

如果这个问题不适合Stack Overflow,请告诉我这个问题应该放在哪里。感谢

编辑:我没有询问如何访问嵌套变量,我在术语中询问如何引用它

鉴于value1a的属性,属性为anObject。什么是value1anObject?它是"属性 - 属性"?我不是故意轻率,但我称之为什么?

1 个答案:

答案 0 :(得分:2)

a属性为anObject的方式相同,value1属性为a

因此您可以使用以下方式访问它:

anObject.a.value1

就是这样。答案很长,可以将其分解为以下代码:

const innerObject = anObject.a;
const result = innerObject.value1;

请注意,在JavaScript中,对象只是键值对的列表,即字典。您可以使用任何数据类型作为值,甚至是另一个对象,因此您最终会得到嵌套对象 - 这正是您在这里所拥有的。

因此,对于您正在讨论的函数,您需要做的就是通过其分隔符char(例如.)拆分给定的字符串,然后以递归方式遍历对象树,直到找到所需的位置到。

请注意,例如在npm上已经存在现成的模块,例如, nested-keys(只是为了任意命名,有许多其他模块执行相同或至少相似的任务)。

即使非常常用的库(如Lodash)也提供此功能,因此您很可能无需为自己编写代码,但可以使用这样的现成功能。例如,你可以使用[get](Lodash的https://lodash.com/docs/4.16.6#get]

var object = { 'a': [{ 'b': { 'c': 3 } }] };

_.get(object, 'a[0].b.c');
// => 3

_.get(object, ['a', '0', 'b', 'c']);
// => 3

_.get(object, 'a.b.c', 'default');
// => 'default'

(此示例代码取自get上链接的Lodash文档。)

如果您仍想创建自己的实现,那么查看Lodash的源代码可能是一个很好的起点。

<强>更新

关于你的编辑,我认为没有官方用语。您可以将其称为嵌套属性或子对象的属性。我想我最初的描述与你原来的一样:value1是一个对象的属性,它是anObject的属性。这不是优雅,但在技术上是正确的,正如我所说,我不认为有更好的(官方)术语。