Программно задавая имя переменной

Есть ли ярлык для записи следующих 100 назначений?

variable_1 = 1;
variable_2 = 2;
variable_3 = 3;

...

variable_100 = 100;

Я пробовал

for(var i = 1; i <= 100; i++) {
    variable_ + i = i;
}

но я получаю сообщение об ошибке "Недопустимая левая сторона в назначении". Любые идеи?

Ответ 1

Вот несколько методов:

Способ 1: используйте eval

Вот самый прямой метод:

for(var i = 1; i <= 100; i++) {
  eval("var variable_" + i + " = " + i);
}
variable_1; // => 1

Отказ от использования вышеуказанного метода. Я не думаю, что эта проблема является хорошим кандидатом на использование eval. Если вы используете eval, вы никогда не должны позволять вводить вход пользователя в то, что вы eval ing, или вы можете открыть свой сайт для рисков безопасности. Эта ошибка является основной причиной, по которой люди говорят, что eval является злом.

Способ 2. Использование динамически созданных свойств объекта

Это намного лучший способ:

// If you want these variables to be global, then use `window` (if you're 
// in a browser) instead of your own object.
var obj = {};
for(var i = 1; i <= 100; i++) {
  obj["variable_" + i] = i;
}
obj.variable_1; // => 1

О примечании в комментарии об использовании окна для создания глобальных переменных: я бы рекомендовал против этого, так как это быстрый способ загромождать вашу глобальную область действия и неосторожно наступать на переменные.

Способ 3: используйте массив

Дэвид предложил использовать массив. Это еще одна отличная идея, и, в зависимости от того, что вы пытаетесь сделать, может быть предпочтительнее:

var arr = [];
for(var i = 1; i <= 100; i++) {
  arr.push(i);
}
arr[0]; // => 1

Ответ 2

Это будет сделано:

for(var i = 1; i <= 100; i++) {
    eval("variable_" + i + " = " + i + ";");
}

eval в основном злой, но для этой цели это нормально использовать. (ссылка)

Живой тест.

Ответ 3

Вам лучше использовать массив

var variable = [];
for (var i=1; i <= 100; i++) {
  variable[i] = i;
}

Позже вы можете получить доступ к значениям с помощью переменной [1], переменной [2] и т.д.

Ответ 4

Если это так, почему бы не определить массив объектов

var a = new Array();
for(i=0;i<100;i+=)
 a[i] = i;

Ответ 5

Используйте массив:

var variable = [];

for(var i = 1; i <= 100; i++) {
    variable[i] = i;
}

В качестве аналогии вы хотите использовать массив вместо 100 переменных по той же причине, что и вам.

<div class="variable"></div>
<div class="variable"></div>
<div class="variable"></div>
//and so on

вместо

<div id="variable_1"></div>
<div id="variable_2"></div>
<div id="variable_3"></div>
//and so on
<div id="variable_100"></div>

Invalid left-hand side in assignment

Эта ошибка генерируется, потому что variable_ + i является выражением. Интерпретатор считает, что вы пытаетесь добавить две переменные вместо конкатенации имени переменной и строки. Выражение не может быть в левой части операции присваивания.

Ответ 6

Почему бы не использовать массив вместо этого?

<script language="javascript">
var arrayVar = new Array();

for (var i=0; i<100; i++) {
    arrayVar["variable_" + i] = i;
}
</script>

Ответ 7

for(var i = 1; i <= 100; i++) {
    window["variable_" + i] = i;
}

alert( variable_50 );

alert( variable_34 );

Ответ 8

Предполагая, что вы в браузере, вы можете сделать:

global[variable] = 'hello'

console.log(variable)hello