与 PHP 不同,JavaScript 不提供对全局数组(包含对当前声明的所有变量名的引用)的访问。因此,JavaScript 不提供对变量的本机支持。但是,只要将所有变量定义为数组或对象的一部分,就可以模拟此功能。这将为您创建一个全局数组。例如,不要像这样在 hello
全局范围内声明变量:
var hello = 'Hello, World!';
让我们将其封装在一个对象中。我们将该对象称为 vv
(变量变量):
var vv = {
'hello': 'Hello, World! ',
//Other variable variables come here.
},
referToHello = 'hello';
现在我们可以通过索引来引用变量,并且由于可以使用变量提供数组索引,因此我们实际上是在使用变量:
console.log(vv[referToHello]); //Output: Hello, World!
你的问题的答案
让我们将其应用到您在原始问题中提供的代码:
var vv = {
'x': 'variable',
'variable': 'Hello, World!'
};
console.log(vv[vv['x']]); // Displays "Hello, World!"
实际用途
虽然上面的代码可能看起来非常繁琐和不切实际,但使用这种封装方式,JavaScript 中的变量还是有实际用途的。在下面的例子中,我们使用相同的概念来获取未定义数量的 HTML 元素的 ID。
var elementIds = [],
elements = ['message','fillOrStroke','sizePicker','colorPicker']; //The items in this array could be defined automatically via an input, database query, event, etc.
elements.forEach( (element) => {
elementIds[element] = document.getElementById(element);
});
此示例根据每个元素的 ID 声明变量(键为 elementIds
),并将该元素的节点分配为每个变量的值。由于 JavaScript 中通常不鼓励使用全局变量,因此为变量赋予唯一作用域(在本例中,在数组内声明它们 elementIds
)不仅简洁,而且更负责任。