Обрабатывать ложные аргументы

1

Есть ли какой-либо чистый способ присвоить значения по умолчанию функции, если какой-либо из ее аргументов является ложным.

Я знаю, что вы можете сделать что-то вроде

function addSomething(element, someArr = []) {
  someArr.push(element);
}

Но это не обрабатывает, если второй аргумент равен null, и тогда вы получите "не может прочитать свойство" push "нулевого значения.

Я надеялся, что ниже будет работать

function addSomething(element, someArr || []) {
  someArr.push(element);
}

....

Так что я оставил выполнение проверки внутри метода?

function addSomething(element, someArr) {
  someArr = someArr || [];
  someArr.push(element);
  // OR
  someArr && someArr.push(element);
}

Или есть шаблон, который я пропустил

Теги:

2 ответа

2

Ваш код - лучшее, на что вы можете надеяться. null отличается от массива, поэтому, если вы явно передаете его в свою функцию, он должен:

  • Сбой громко, потому что в программе есть ошибка. Вы хотели получить массив и получили нуль.
  • Обработайте его изящно, потому что вы также хотите разрешить null.

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

function addSomething(element, someArr: any[]|null)

И вам придется явно признать этот факт.

  • 0
    похоже, что это не работает. пожалуйста, добавьте рабочий пример. если вы используете внутри параметров someArr = someArr || [] тогда вы получите ошибку Use before declaration
  • 0
    Кроме того, учитывая ответ PeterMander, это не выглядит как «лучшее, на что вы можете надеяться»
Показать ещё 8 комментариев
1

Даже ваш последний подход не на 100% безопасен:

function addSomething(element, someArr) {
  someArr && someArr.push(element);
}
addSomething('test', 'foobar');

Вы должны проверить, является ли параметр массивом:

function addSomething(element, someArr) {
  Array.isArray(someArr) && someArr.push(element);
}
addSomething('test', 'foobar'); // fails silently
  • 3
    Я люблю терпеть неудачу молча.
  • 0
    Это правда, хорошая мысль. Я был обеспокоен только нулем, потому что это то, что я получаю, если вызов API не удался. Таким образом, аргумент arg всегда будет нулевым. Но если кто-то попытается вставить строку, конечно, она потерпит неудачу. Но Array.isArray (someArr) лучше, так как я хочу, чтобы функция была устойчивой. Отмечу это как исключенный ответ в ближайшее время, хочу увидеть и другие мнения ... Но в основном я должен сделать> someArr = Array.isArray(someArr) || []; (я использую методы массива несколько раз в этой функции)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню