Новое значение переменной с помощью eval()

Рейтинг: 1Ответов: 2Опубликовано: 08.10.2014

Привет.

У нас имеется переменная:

var str_1234 = 'Hello';

Я пытаюсь присвоить ей новое значение таким способом:

eval('str_' + '1234') = 'Goodbye';

Но выдаёт ошибку. Дело в том, что цифры 1234, приходят с сервера. Мы заведомо не знаем какие цыфры придут. Поэтому я решил воспользоваться подобным способом. Как мне присвоить новое значение для переменной?

Ответы

▲ 1

Дело в том, что цифры 1234, приходят с сервера

запятая между подлежащим и сказуемым не нужна

цыфры

эй, ну в прошлый раз же через "и" было написано, что за дела?

Как мне присвоить новое значение для переменной?

Через eval (плохой метод)

eval('var str_' + data + ' = \'Goodbye\'); // Удивительно, правда?

Выставляя глобальную переменную (плохой метод, да и нода какая-нибудь вряд ли знает про window)

window['str_' + data] = 'Goodbye';

Выставляя значение в текущем контексте (опасно и некрасиво)

this['str_' + data] = 'Goodbye';

Правильней всего, однако, просто завести объект.

var data = {};
data['str_' + suffix] = 'Goodbye';

Несмотря на то, что он сам по себе не является контекстом, его легко можно использовать как контекст, а также передавать куда угодно (объекты передаются по ссылке, поэтому переданный куда-то объект будет по факту все тем же объектом, и изменения будут происходить синхронно во всех контекстах).

▲ 1

C eval, который никто не рекомендует:

eval('str_' + '1234 = '+'Goodbye');

Без eval:

window['str_' + '1234'] = 'Goodbye';

Причина ошибки в том, что код переданный в eval выполняется, но сама функция никаких значений не возвращает и вместо себя не подставляет. Получается, вы присваиваете ничему какое-то значение.