2010-05-25 1 views
1

У меня есть массив, который мне нужно распаковать.Использование eval() в Javascript для распаковки массива

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

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

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

"var1", "var2".

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

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

+0

я сомневаюсь вы можете получить JavaScript, чтобы добавить «сам», если только вы не используете JSON.stringify(). »- это просто разделители строк и не относятся к строковому значению. – Dormilich

+0

Это то, что я хотел бы передать ЗНАЧЕНИЯ ВАРОВ ... они не всегда могут быть ни строками. Мне интересно, возможно ли это вообще. – sarsnake

+0

Как вы хотите сериализовать «другие типы»? – James

ответ

7

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

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

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

myFunc.apply(this, arr); 

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

+0

спасибо, я не знал, существования приложения. Однако, какова цель этого здесь? Я не совсем понимаю, что это такое. Нужно ли мне это? – sarsnake

+1

Вам нужно * что-то * там, если вы не уверены, что используете этот «этот», чтобы сохранить текущий контекст или передать «null», чтобы использовать глобальный контекст. Как я уже сказал, первый параметр управляет тем, что 'this' * внутри * относится к функции. –

+0

отлично, это именно то, что мне нужно. Спасибо, Шон! – sarsnake

0

Это порождает вывод, который вы хотите

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

var s = "\"" + params.join("\",\"") + "\"";