Ошибка типа: невозможно сопоставить с «неопределенным» или «нулевым»

Код

client.createPet(pet, (err, {name, breed, age}) => {
  if (err) {
    return t.error(err, 'no error')
  }
  t.equal(pet, {name, breed, age}, 'should be equivalent')
})

ошибка

client.createPet(pet, (err, {name, breed, age}) => {
                        ^

TypeError: Cannot match against 'undefined' or 'null'.

Почему я получаю эту ошибку? Мои знания о ES6 привели меня к предположению, что эта ошибка должна возникать только в том случае, еслимассив или объект, подлежащий деструктурированию или его дочерние элементы являетсяundefined или жеnull.

Я не знал, что параметры функции используются как совпадение. И если они есть, то почему это только ошибка, если я пытаюсь уничтожить один из них? (это неundefined или жеnull).

Ответы на вопрос(1)

Решение Вопроса

эта ошибка должна возникать только в том случае, если массив или объект подвергаются деструктуризации или еслиundefined или жеnull.

Именно так. В вашем случае разрушаемый объектundefined или жеnull, Например,

function test(err, {a, b, c}) {
  console.log(err, a, b, c);
}

test(1, {a: 2, b: 3, c: 4});
// 1 2 3 4
test(1, {});
// 1 undefined undefined undefined
test(1);
// TypeError: Cannot match against 'undefined' or 'null'.
 Elad06 июл. 2017 г., 13:45
Жаль, что недавно выпущенная функция не имеет более информативного и полезного сообщения.
 CENT1PEDE06 дек. 2017 г., 08:54
В этом есть смысл. : D
 Prashanth Chandra26 мая 2016 г., 08:52
Вы правы, меня ввела в заблуждение стрелка в сообщении об ошибке
 Luke Chinworth28 нояб. 2017 г., 22:14
Черт, мне показалось, что я нашел элегантное решение для проверки на ноль, уничтожив undefined. Ну да ладно, деструктуризация{} все еще довольно удобно для обработки нулевых значений со значениями функций по умолчанию.
 thefourtheye26 мая 2016 г., 08:54
@PrashanthChandra Если вы внимательно посмотрите, стрелка на самом деле указывает на открывающую скобку, а не на ошибку :-)

Ваш ответ на вопрос