2014-01-13 2 views
0

У меня здесь проблема. У меня есть следующий код, объявляя две переменные:Изменить переменную, которая находится в другой переменной

var anawesomevariable = "hello world"; 
var variabletwo = "anawesomevariable"; 

Как вы можете видеть, содержание второй переменной являются такими же, как имя первой переменной. Моя проблема: я хочу изменить первую переменную, используя содержимое variabletwo. Иными словами, я хочу сказать «Привет, Javascript, измените содержимое переменной, имя которой находится в variabletwo». Есть ли способ сделать это в Javascript?

P.S. Я havn't действительно объяснил, что ясно, но вы получите мою точку зрения (я надеюсь)

+1

Возможный дубликат [Как найти переменную JavaScript по ее названию] (http://stackoverflow.com/questions/724857/how-to-find-javascript-variable-by-its-name) –

+0

Почему? Эта проблема не имеет большого смысла. Зачем вам это нужно? – Doorknob

+0

@DoorknobofSnow Мой пример здесь не имеет смысла, я признаю, что **, но ** в веб-приложении, которое я создаю, есть 10 кнопок, которые открывают одно и то же всплывающее окно, в котором пользователь может изменить и каждая из этих кнопок передает номер функции (кнопка 1 проходит 1, кнопка 2 проходит 2 и т. д.). Когда пользователь нажимает кнопку в окне, ему необходимо изменить переменную, которая включает номер кнопки на конце. Поэтому мне нужно было получить доступ к этой переменной, используя другую переменную (т. Е. Фактическое число с другим текстом спереди). Значит ли это теперь больше смысла? – Toastrackenigma

ответ

1

Вы можете сделать

eval(variabletwo + ' = "new value"'); 

что приводит выполнение кода

anawesomevariable = "new value"; 
+0

Я не знаю, почему это было приостановлено. Ясно, что «eval» - это путь сюда (если, конечно, вход не указан пользователем или другим злом). Хотя я и говорю, что проблема OP не имеет большого смысла. – Doorknob

+0

Спасибо, это сработало отлично :) – Toastrackenigma

1

Если awesomevariable является глобальной переменная вы можете сделать это:

window[variabletwo] = 'goodbye world'; 
+1

Это не сработает, если переменная не является глобальной. –

+0

Это не сработает, поскольку переменные не являются глобальными. – Doorknob

0

вы не можете * (и не должны) манипулировать переменных, но это кусок пирога с свойствами:

var obj = {anawesomevariable: "hello world"}; 
var variabletwo = "anawesomevariable"; 

obj[variabletwo] = whatever 

^* даже не думать о "Eval" здесь. шутки в сторону.

+0

Это правильный способ сделать это, за исключением того, что это не помогает ситуации, заданной в исходном вопросе. –

+0

@JosephMyers: если ответ на это равен, вы задаете неправильный вопрос. – georg

+0

Вы почти всегда правы, потому что eval почти всегда ошибается. Тем не менее, «Программы, которые пишут программы, - самые счастливые программы в мире». Как и root, eval следует избегать практически любой ценой и * определенно *, которого следует избегать в простом случае, таком как этот. Но поскольку авторы самого языка слишком ограничены, чтобы предвидеть и проектировать все возможные виды использования языка, который они сами разработали, есть такие вещи, как eval. Многие проблемы программирования могут быть решены только с помощью кода, который пишет код, хотя это не один из них. –

0

У вас есть несколько вариантов. Вариант 1, который использует eval(), которую я отвратить, был бы простым, как это

eval(variabletwo + ' = "cool"'); 

Второй вариант объявить их как глобалов, как это

window.anawesomevariable = "hello world"; 
window.variabletwo = "anawesomevariable" 

, а затем

window[variabletwo]="foo"; 

Однако, если вы хотите сохранить что-то в текущей области действия, объявите его в объекте, например, это

var obj = {anawesomevariable: "hello world"}; 
var variabletwo = "anawesomevariable"; 

obj[variabletwo] = "foo"; 
Смежные вопросы