Подтвердить что ты не робот

Почему мое присоединение к массиву JavaScript не работает?

У меня есть функция, которая принимает несколько аргументов (только одна функция определена в функции)

var getSearchFields = function(method) {

    console.log(arguments); // this prints them out nicely into the console

    var args = arguments;

    var argsString = args.join('/'); // I expect 'arg1/arg2/arg3', instead I get 'args.join is not a function'
}

Мне просто нужна строка всех аргументов, отправляемых этой функции. Я продолжаю получать эту ошибку:

args.join не является функцией

Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно?

4b9b3361

Ответ 1

arguments - псевдо-массив, а не реальный. Метод join доступен для массивов.

Вам нужно обмануть:

var convertedArray = [];

for(var i = 0; i < arguments.length; ++i)
{
 convertedArray.push(arguments[i]);
}

var argsString = convertedArray.join('/');

Подобно другим сообщениям, вы можете сделать следующее как сокращенное:

var argsString = Array.prototype.join.call(arguments, "/");

Ответ 2

Как сказано выше, объект arguments не является массивом, но вы можете напрямую применять функции массива, обратившись к Array.prototype и выполняя их с помощью apply или call, чтобы изменить контекст:

var argsString = Array.prototype.join.call(arguments, '/');

Ответ 3

Если вы используете jQuery 1.2 +, вы можете использовать $.makeArray():

Преобразуйте подобный массиву объект в настоящий массив JavaScript.

В примере в вопросе просто используйте эту строку

var args = $.makeArray(arguments);

Ответ 4

аргументы на самом деле не являются массивом.

попробуйте следующее:

var args = [].splice.call(arguments,0);
var argsString = args.join('/');

Ответ 5

arguments не является массивом JavaScript; это специальный объект, который не имеет метода join.

Ответ 7

Вам нужно назначить переменную для ее работы.

var a = ['Wind', 'Rain', 'Fire'];

var myVar1 = a.join();

var myVar2 = a.join(', ');

var myVar3 = a.join(' + ');

var myVar4 = a.join('');