=
недопустимо для присвоения значений в javascript, вы ищете {key: value}
.
Измените =
на :
, чтобы исправить ошибку:
// You want to destructure you object, drop the `obj =`
function test({item1,item2 = 0}) {
// If you were to modify this data,
// use `Object.assign({}, {item1,item2})` to prevent mutating your data
print({item1,item2});
}
// save some space by destructuring the items you want
function print({item1, item2}) {
console.log(`${item1} ${item2}`);
}
// Initial expected result
test({item1: "foo"});
Разрушение объекта по сравнению со значениями по умолчанию
Я предполагаю, что вы ожидаете, что значение item2
будет равно 0
правильно? Он не равен 0
, потому что вы передаете новый объект, который переопределяет объект в параметрах вашей функции.
Точно так же, как если бы вы установили:
function(a = 1){}
и передать значение, a
больше не будет равно 1
, поскольку оно было заменено новым значением.
Причина, по которой вы получаете ожидаемое поведение в своем первом фрагменте кода (без obj = {...}
), заключается в том, что вы уничтожаете объект. Это не задание, скорее вы извлекаете нужные части из объекта.
Когда у вас есть функция с такими аргументами, как:
function({arg1, arg2}){}
JavaScript извлечет эти ключи из объекта, который вы передаете.
Назначение значений по умолчанию
Если, с другой стороны, если вы хотите передать объект без разрушения, вы можете сделать это так:
function(obj = {a: 'default'}){}
Но, если вы передадите объект в функции выше, значение по умолчанию для объекта и всех его ключей (a
или любых других) будет заменено на любой объект, который вы передаете. Здесь ссылка на работу параметров по умолчанию в javascript .
Я настоятельно рекомендую вам разобраться с деструктуризацией, это невероятно полезно при работе с объектами или массивами в javascript.
Надеюсь, это поможет,