具有必需值和空对象的参数对象解构
Parameter Object Destructuring with Required Values and Empty Object
使用 ES6 参数对象解构,我们可以要求某些属性的存在,以及提供 default values. Dr. Axel Rauschmayer said in the 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
函数第一个参数的空对象?
在您的特定示例中,您不需要将被破坏的对象默认为空对象,因为您的预期行为是在缺少参数时抛出异常。当没有提供参数时,您可以使用它的属性来默认对象:
function ajax({
type = requireParameter("type"),
url = requireParameter("url"),
data = requireParameter("data"),
success = requireParameter("success"),
error = requireParameter("error"),
isAsync = requireParameter("isAsync")
} = {
type: "get",
url: "http://my.api.io",
data: {},
success: () => {},
error: () => {},
isAsync: true
}) {
console.log(JSON.stringify({
type,
url,
data,
success,
error,
isAsync
}, null, 2));
};
function requireParameter(name) {
throw new Error (`Missing parameter "${name}"`);
}
try {
ajax(/* Don't provide anything and use the default */);
} catch (e) {
console.warn(e.message);
}
使用 ES6 参数对象解构,我们可以要求某些属性的存在,以及提供 default values. Dr. Axel Rauschmayer said in the 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
函数第一个参数的空对象?
在您的特定示例中,您不需要将被破坏的对象默认为空对象,因为您的预期行为是在缺少参数时抛出异常。当没有提供参数时,您可以使用它的属性来默认对象:
function ajax({
type = requireParameter("type"),
url = requireParameter("url"),
data = requireParameter("data"),
success = requireParameter("success"),
error = requireParameter("error"),
isAsync = requireParameter("isAsync")
} = {
type: "get",
url: "http://my.api.io",
data: {},
success: () => {},
error: () => {},
isAsync: true
}) {
console.log(JSON.stringify({
type,
url,
data,
success,
error,
isAsync
}, null, 2));
};
function requireParameter(name) {
throw new Error (`Missing parameter "${name}"`);
}
try {
ajax(/* Don't provide anything and use the default */);
} catch (e) {
console.warn(e.message);
}