2016-05-18 2 views
0

Как создать динамическую переменную в Javascript?Динамическая переменная Javascript (добавлено случайное число)

К примеру, у меня есть:

var myAwesomeText = "Hello World!"

Но теперь я хочу varible MyAesomeText иметь случайное число, прикрепленное к ней каждый раз при обновлении страницы. Так что вместо этого будет выглядеть как-то вроде этого:

var myAwesomeText12345 = "Hello World!"

И самое главное, как я называю, что эта новая случайная величина обратно после случайного числа были возложены на него? (т. е. alert (???);)

Я пробовал что-то вроде этого, но я ошибаюсь в этом.

var myRnd = Math.floor(Math.random()*100000); 
 
var myVar = "MyAwesomeText" + myRnd; 
 
str = myVar + ' = ' + '"Hello World!"'; 
 
eval(str); 
 

 
alert(str);

+0

вы можете создать строку и использовать Eval() – lonewarrior556

+0

не используйте Eval. – trincot

+0

eval опасен, когда вы не доверяете вводам, очень полезно в противном случае – lonewarrior556

ответ

2

Вы можете получить доступ к переменной с помощью window объекта:

var myRnd = Math.floor(Math.random()*100000); 
 
var myVar = "MyAwesomeText" + myRnd; 
 
window[myVar] = "Hello World!"; 
 

 
alert(window[myVar]);

Не используйте eval для этого: это медленнее и совершенно ненужно для этой проблемы. Также он может иметь неожиданные побочные эффекты, если у вашего MyAwesomeText есть символы в нем, которые имеют особое значение в коде JavaScript, например, в скобках, запятой, двоеточии, запятой, фигурных скобках и т. Д.

Заметим, что обозначение object['prop'] дает тот же результат, что и object.prop. Поскольку глобальные переменные создаются в объекте window, вы можете получить доступ к любой переменной через нотацию window.myvariable.

Объединив эти два факта, вы можете получить доступ к глобальным переменным, которые имеют динамическое имя с window[dynamicVariableName].

+0

или ... alert (eval (myVar)); :) – lonewarrior556

+0

Если вам нравится неэффективный код, ... да. – trincot

+0

Спасибо, ребята! Это хорошо работает. Я буду использовать это в более крупном проекте и увижу, сталкиваются ли я с какими-либо проблемами! – rezet

0

Eval является путь

var num = 10; 
var string = "var a"+num +"= 'hi'" 
string 
// "var a10= 'hi'" 
eval(string) 
a10 
// 'hi' 
0

Вы пропустите один Eval на чеку

var myRnd = Math.floor(Math.random()*100000); 
var myVar = "MyAwesomeText" + myRnd; 
str = myVar + ' = ' + '"Hello World!"'; 
eval(str); 

alert(eval(myVar)); 
Смежные вопросы