Перезаписать объект аргументов для функции Javascript - PullRequest
0 голосов
/ 15 февраля 2011

Если бы у меня было следующее:

    // Clean input.
    $.each(arguments, function(index, value) {

        arguments[index] = value.replace(/[\W\s]+/g, '').toLowerCase();
    });

Разве это было бы плохо?Я больше не использую неочищенные аргументы в функции, и было бы неплохо не создавать бесполезную копию arguments просто для их использования, но есть ли какие-либо негативные последствия для этого?

В идеалеЯ бы сделал это, но я предполагаю, что это сталкивается с проблемами, поскольку arguments на самом деле не является массивом:

    arguments = $.map(arguments, function(value) {

        return value.replace(/[\W\s]+/g, '').toLowerCase();
    });

Спасибо за любой вклад.

РЕДАКТИРОВАТЬ: I 'Мы только что поняли, что оба они теперь находятся внутри своих собственных функций, поэтому объект arguments изменился.Любой способ сделать это без создания ненужной переменной?

1 Ответ

3 голосов
/ 15 февраля 2011

Я бы не подумал, что arguments[i] = value; работает по той же причине (это не настоящий массив).

Вы действительно должны назначить очищенные значения новой переменной:

var cleaned_args = $.map(arguments, function(value) {
    return value.replace(/[\W\s]+/g, '').toLowerCase();
});

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

Относительно вашего редактирования:

Правильно, первый не будет работать, потому что arguments относится к аргументам анонимной функции.

...