Как создать динамические переменные с помощью jquery?

70
5

Я хочу, чтобы некоторые jquery-переменные создавались динамически. В моем коде у меня есть цикл, и со значениями цикла я хочу создать некоторые переменные. Вот мой пример кода.

array=["student","parent","employee"]

$.each(user_types, function( index, value ){
var value+"_type" // this is the type of variable i want to build.
})

Я нашел об функции eval. Этот код выглядит следующим образом.

var type = "type"
eval("var pre_"+type+"= 'The value of dynamic variable, val';");

alert(pre_type) // this gives 'The value of dynamic variable, val' in alert box.

Есть ли альтернативные способы, которые я прочитал, функция eval не предпочтительнее при кодировании.js файлов.

спросил(а) 2013-11-14T14:48:00+04:00 6 лет, 11 месяцев назад
1
Решение
128

Каждый раз, когда вы обнаруживаете, что используете переменную в имени переменной, вы, вероятно, захотите использовать литерал объекта. Создайте объект с фигурными фигурными скобками {}, а затем установите ключ свойства объекта с помощью квадратной скобки:

var user_types = ["student","parent","employee"];
var types = {};

$.each(user_types, function( index, value ){
types[value] = 'The value of dynamic variable, val';
});

JSFiddle

Примечание. Вы не отметили его, но я предполагаю, что вы использовали each(), который используете jQuery, пожалуйста, исправьте меня, если я ошибаюсь.

ответил(а) 2013-11-14T14:54:00+04:00 6 лет, 11 месяцев назад
89

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

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

var array=["student","parent","employee"]

array.forEach(function(value){
window[value+"_type"] = 'My value ' + value;
});

console.log(student_type);
console.log(parent_type);
console.log(employee_type);

Если вы не хотите переменные в глобальном масштабе, я боюсь, что не знаю элегантного решения.


Я использовал array.forEach вместо вашего цикла jQuery, потому что проблема вообще не связана с jQuery, и потому, что я не думаю, что вы достаточно сказали свою логику, чтобы сделать последовательный пример.

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

// Difference 1: hoisting
console.log(x); // undefined
console.log(y); // ReferenceError: y is not defined
var x = 5;
window[y] = 5;
console.log(x); // 5
console.log(y); // 5
// Difference 2: [[Configurable]]
delete x;
delete y;
console.log(x); // 5
console.log(y); // ReferenceError: y is not defined

ответил(а) 2013-11-14T14:53:00+04:00 6 лет, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема