JavaScript解构是否具有捕获对象及其内容的语法?
换句话说,我是否可以在函数的arg列表中完全完成以下操作,而无需以下const
行?
f = (a) => {
const {b} = a;
console.log("I see:", a, "and", b);
}
f({b:42})
==> I see {b: 42} and 42
(FWIW:我正在考虑Clojure或ClojureScript中的:as
之类的东西。)
答案 0 :(得分:5)
是的
const f = (a, {b} = a ) => {
console.log("I see:", a, "and", b);
}
f({b:42})
有关destructuring assignment的更多用例,您可以看到此
要注意的是:-在函数定义中,请始终保留比函数调用多一个的参数。
更新通过这种方式,您不必担心函数定义中的一个额外参数
const f = (...z) => (a=z[0],{b}=z[0],...arguments) => {
console.log("I see:", a, "and", b, z);
}
f({b:42},{b:32})()
您也可以使用IIFE的@bergi进行尝试,谢谢您的投入。
const f = (a, ...z) => (({b}) => {
console.log("I see:", a, "and", b, z);
})(a);
f({b:42},{b:32})
答案 1 :(得分:0)
这是一种方式
const f = (a, {b}=a) => {
console.log("I see:", a, "and", b);
}
f({b:42})
当您需要传递多个参数时,就会出现问题。
const f = (a, {b}=a) => {
console.log("I see:", a, "and", b);
}
f({b:42},123)