JavaScript 动态变量名
 
本教程是关于 JavaScript 动态变量名的,我们将在其中了解它的定义、创建和在 JavaScript 中的使用。我们不使用硬编码动态变量,而是在程序执行期间自动生成。
我们可以使用 eval() 函数和 window 对象来学习 JavaScript 动态变量名称。
eval() 是一个全局对象的函数属性,它执行表示为字符串的 JavaScript 代码。
eval() 如果它的参数是一个表达式,则计算表达式,如果它的参数是一个或多个 JavaScript 语句,则运行语句。
eval() 也可以在未经你许可的情况下在应用程序中执行恶意代码。这样,应用程序的范围也对第三方可见,从而导致可能的攻击。因此,除了学习目的之外,最好从不使用 eval。我们还可以使用 window 对象在 JavaScript 中创建动态变量。它是在我们的浏览器上运行的全局对象。
让我们通过示例代码来理解这两种方式。
在 JavaScript 中使用 eval() 创建动态变量名
JavaScript 代码:
var j = 'item';
var i = 0;
for (i = 1; i < 5; i++) {
  eval('var ' + j + i + '= ' + i + ';');
}
console.log('Item1 = ' + item1);
console.log('Item2 = ' + item2);
console.log('Item3 = ' + item3);
console.log('Item4 = ' + item4);
输出:
"Item1 = 1"
"Item2 = 2"
"Item3 = 3"
"Item4 = 4"
在上面的代码中,我们使用 eval() 创建动态变量名称,它执行声明 item 并分配 i 的值的语句。
在 JavaScript 中使用 window 对象创建动态变量名
JavaScript 中的一切都是 Context(一种对象)和 Object。在函数的情况下,每个变量都存储在 Variable 或 Activation Object 中。
我们可以在 Global Scope 中隐式写入变量,等于浏览器中的 window,并且可以通过 bracket 或 dot 表示法访问。
JavaScript 代码:
var num1 = 1, num2 = 2, num3 = 3;
var newNumberViaDot = window.num1;
var newNumberViaBracket = window['num1'];
console.log('Dynamic variable via dot notation');
console.log(newNumberViaDot);
console.log('Dynamic variable via bracket notation');
console.log(newNumberViaBracket);
输出:
"Dynamic variable via dot notation"
1
"Dynamic variable via bracket notation"
1
上述创建动态变量名称的技术仅适用于全局对象。原因是全局对象的变量对象是 window 对象本身。
我们无法访问函数的 Context 中的 Activation Object。请参阅以下代码。
function numbersFunction() {
  this.num1 = 1;
  this.num2 = 2;
  this.num3 = 3;
  var newNumber = window['num1'];  // === undefined
  console.log(newNumber);
  newNumber = this['num1'];  // === 1
  console.log(newNumber);
}
new numbersFunction();
输出:
undefined
1
在上面给出的片段中,new 创建了 numberFunction() 的实例;没有它,numberFunction() 的范围将是全局的,等于 window 对象。此示例打印 undefined 和 1。
