2009-10-31 2 views
6

Можно создать дубликат:
How to access javascript variable value by creating another variable via concatenation?

В PHP я могу иметь:

$theVariable = "bigToe"; 
$bigToe = "is broken"; 

, что:

echo "my ".$theVariable." ".$$theVariable; 

бы дисплей

my bigToe is broken 

Как я могу сделать что-то похожее на JavaScript?

+1

См: http://stackoverflow.com/questions/993013/how-to-access-javascript-variable-value-by-creating- another-variable-via-concaten –

+1

Вам будет лучше использовать ассоциативный массив для PHP или объект в JavaScript. – JAL

+0

@Code Duck: Есть случаи, когда это полезно. –

ответ

1

Просто

eval("variableName") 

Хотя вы должны быть уверены, что вы знаете точное значение вашей evaling, как он может быть использован для инъекций скриптов, если вы передаете его ненадежное содержимое

+1

Вы определенно не должны использовать eval –

+1

@Fabien: Я знаю, что у eval огромное количество угроз безопасности, я даже четко прокомментировал это. Тем не менее, единственный способ добиться того, что было запрошено, - это eval, говоря, что «вы определенно не должны использовать eval» означает, что мой ответ должен был быть «это невозможно», что явно неверно. – olliej

1

Один из способов заключается в использовании eval функцию

var theVariable = "bigToe"; 
var bigToe = "is broken"; 
console.log('my '+theVariable+' '+eval(theVariable)); 

Другой способ заключается в использовании window объект, который содержит пару ключ-значение для каждой глобальной переменной. Доступ к нему можно получить в виде массива:

var theVariable = "bigToe"; 
var bigToe = "is broken"; 
console.log('my '+theVariable+' '+window[theVariable]); 

Оба метода печатают ответ на консоль Firebug.

+2

вариант «окно» является лучшим. Если ваш var не находится в глобальной области действия (например, объявлен в функции), вы должны заменить «окно» на «это» или имя содержащего объекта –

+1

@Fabien: если var не находится в глобальной области, то использование «это» в качестве префикса вам не поможет - единственная причина, по которой «это» и «окно» часто взаимозаменяема, состоит в том, что «это» всегда является глобальным объектом, когда функция вызывается без базы и окна - это просто псевдоним к этому глобальному объекту. – olliej

3

Я хотел бы использовать window массив вместо eval:

var bigToe = "big toe"; 
window[bigToe] = ' is broken'; 
alert("my " + bigToe + window[bigToe]); 
+0

Почему вы предпочитаете окно [] над eval()? – baiano

+1

@baiano: устраняет любые проблемы с безопасностью, которые появляются с использованием 'eval', а также ссылки на словарь * всегда * быстрее, чем оценка Javascript только для создания решения. –

+0

@baiano - просто потому, что я всегда стараюсь избегать использования 'eval', если я могу ему помочь. См. Http://stackoverflow.com/questions/86513/why-is-using-javascript-eval-function-a-bad-idea – karim79