Javascript 为什么作为函数参数的内联解构不能按预期工作
假设我有一段代码需要访问一个状态对象,如下所示Javascript 为什么作为函数参数的内联解构不能按预期工作,javascript,destructuring,Javascript,Destructuring,假设我有一段代码需要访问一个状态对象,如下所示 const store = { getState: () => ({ a: "test", b: 1, c: 23, }) } function printState(_ref) { var a = _ref.a, b = _ref.b, rest = _objectWithoutProperties(_ref, ["a", "b"]); console.log(a, b,
const store = {
getState: () => ({
a: "test",
b: 1,
c: 23,
})
}
function printState(_ref) {
var a = _ref.a,
b = _ref.b,
rest = _objectWithoutProperties(_ref, ["a", "b"]);
console.log(a, b, rest);
}
printState((_store$getState = store.getState(),
a = _store$getState.a,
b = _store$getState.b,
_store$getState)
);
一个类似这样的辅助函数,rest
是为了说明这样一个事实,即它的输出将不仅仅是我传入的解构参数
function printState ({a, b, ...rest}) {
console.log(a, b, rest)
}
所以如果我尝试使用内联解构
printState({ a, b } = store.getState())
上面的输出是
"test" 1 Object {
c: 23
}
我只希望传入
a
和b
,而不是对象的其余部分。有人知道为什么会这样吗?{a,b}=store.getState()
是一个赋值表达式,它返回的值将始终是右侧的表达式,即store.getState()
如果您只想要a
和b
,则可以使用和iLife
const存储={
getState:()=>({
答:“测试”,
b:1,
c:23,
})
}
函数printState({a,b,…rest}){
控制台日志(a、b、rest)
}
printState((({a,b})=>({a,b}))(store.getState())
因为它是一个赋值表达式,返回右边的值,所以您的this函数调用实际上是这样计算的
const store = {
getState: () => ({
a: "test",
b: 1,
c: 23,
})
}
function printState(_ref) {
var a = _ref.a,
b = _ref.b,
rest = _objectWithoutProperties(_ref, ["a", "b"]);
console.log(a, b, rest);
}
printState((_store$getState = store.getState(),
a = _store$getState.a,
b = _store$getState.b,
_store$getState)
);
因此,实际上您最终得到的是printState(store.getState())
您可以将代码粘贴到此处,并查看Destruction允许您公开所需的属性,而无需在代码中添加额外的行,它不会将它们从对象上切掉,它只是一种语法糖而已