Использование деструкции объектов параметров ES6 может потребовать наличия определенных свойств, а также предоставить default values. Dr. Axel Rauschmayer сказал в Six nifty ES6 tricks article, что значения параметров по умолчанию оцениваются только тогда, когда они фактически используются.Деструктурирование объекта параметров с обязательными значениями и пустым объектом
Следующий пример даст больше контекста о том, что я не понимаю:
function ajax({
type = requireParameter("type"),
url = requireParameter("url"),
data = requireParameter("data"),
success = requireParameter("success"),
error = requireParameter("error"),
isAsync = requireParameter("isAsync")
} = {}) {
console.log(JSON.stringify({
type,
url,
data,
success,
error,
isAsync
}, null, 2));
};
function requireParameter(name) {
throw new Error (`Missing parameter "${name}"`);
}
try {
ajax({
type: "get",
url: "http://my.api.io",
data: {},
success:() => {},
error:() => {},
isAsync: true
});
} catch (e) {
console.warn(e.message);
}
Имея {...} = {}
или просто {...}
на первой функции аргумента ajax
будет иметь такое же поведение. Поэтому, когда я тестирую один из двух вариантов, я не могу заключить, что делает логика {...} = {}
.
Вопрос, который я сделал здесь:
Зачем нам нужен объект, чтобы быть равным пустой объект на первый аргумент функции ajax
?
Параметр '{...} = {}' в параметрах функции просто устанавливает значение по умолчанию, если переданный аргумент не определен. – Phillip
Да, но зачем мне это нужно? Поскольку наличие '{...} = {}' или просто '{...}' будет иметь тот же результат. –
Итак, представьте, что вы это делаете: 'ajax (undefined)'. Вы не можете разрушить неопределенность, поэтому проверка всего типа бесполезна. Таким образом, вы устанавливаете значение по умолчанию для первого аргумента как пустой объект, который может быть разрушен :) – Phillip