Использование eval() в Javascript для распаковки массива

У меня есть массив, который мне нужно распаковать.

Итак, из чего-то вроде

var params = new Array();
params.push("var1");
params.push("var2");

Мне нужно иметь что-то вроде

"вар1", "вар2".

Я пытался использовать eval, но eval() дает мне что-то вроде var1, var2... я не хочу сам вставлять кавычки, так как передаваемые vars могут быть целыми числами или другими типами. Мне нужно передать это функции, поэтому я не могу просто пройтись по массиву и вставить его в строку.

Какое решение здесь предпочтительно?


person sarsnake    schedule 25.05.2010    source источник
comment
Я сомневаюсь, что вы можете заставить JavaScript добавить себя, если, возможно, вы не используете JSON.stringify(). являются просто разделителями строк и не принадлежат строковому значению.   -  person Dormilich    schedule 26.05.2010
comment
в том-то и дело, что я хотел бы передать ЗНАЧЕНИЯ переменных... они тоже не всегда могут быть строками. Мне интересно, возможно ли это вообще.   -  person sarsnake    schedule 26.05.2010
comment
Как вы хотите сериализовать другие типы?   -  person James    schedule 26.05.2010
comment
Когда вы говорите передать значения... куда вы переходите?   -  person James    schedule 26.05.2010
comment
Я пытаюсь придумать общее решение, поэтому в момент передачи я не буду знать, сколько параметров примет функция. Следовательно, я пихаю их в массив. Затем мне нужно распаковать и передать их. Таким образом, переменные, помещенные в массив, могут быть разных типов: строки, целые числа, другие массивы. При распаковке я хочу иметь возможность сделать что-то вроде: DoSomething(param1, param2, param3), где param1 .. param3 берутся из массива. Я разместил здесь: stackoverflow.com/questions/2836037/ не получил реальных ответов   -  person sarsnake    schedule 26.05.2010


Ответы (2)


Если у вас есть массив значений, которые вы хотите передать функции, заполняющей формальные параметры, вы можете использовать apply метода прототипа функции.

var arr = [1, 2, "three"];

function myFunc(a, b, c) {
   // a = 1, b = 2, c = "three"
   ...
}

myFunc.apply(this, arr);

Кстати, параметр this в последнем операторе может быть установлен для любого объекта, чтобы установить значение this внутри myFunc

person Sean Kinsey    schedule 25.05.2010
comment
спасибо, я никогда не знал о существовании приложения. Однако, какова цель этого здесь? Мне не совсем ясно об этом. Мне это нужно? - person sarsnake; 26.05.2010
comment
Вам нужно что-то там, если вы не уверены, используйте this, чтобы сохранить текущий контекст, или передайте null, чтобы использовать глобальный контекст. Как я уже сказал, первый параметр определяет, на что this внутри ссылается функция. - person Sean Kinsey; 26.05.2010
comment
отлично, это именно то, что мне было нужно. Спасибо, Шон! - person sarsnake; 27.05.2010

Это генерирует желаемый результат

var params = new Array();
params.push("var1");
params.push("var2");

var s = "\"" + params.join("\",\"") + "\"";
person BrunoLM    schedule 25.05.2010