假设我正在以这种方式使用方法:
const {a, b} = foobar()
// or...
const obj = foobar()
const {a, b} = obj
在
foobar
函数中有没有办法判断它的结果是立即被解构,还是存储在变量/常量中?或者它在那个点/那个范围内没有上下文,除非你在参数中传递它?
// Is this the only way?
const {a, b} = foobar({ isDestructured: true })
有没有办法从 foobar 函数中判断它的结果是立即被解构,还是存储在变量/常量中?或者它在那个点/那个范围内没有上下文,除非你在参数中传递它?
有无法知道。在可以使用该值之前,函数调用 ends。只有在函数调用之前评估赋值时,这个问题才有意义。然而,这是不可能做到的,因为赋值需要右边的值。
const foo = fn();
呼叫
fn()
必须在分配foo
之前完成。因此在 fn
的执行过程中,不可能知道赋值的类型是什么。这也不重要。考虑:
cosnt foo = fn();
const { bar } = foo;
如果在此之后一直使用
bar
,则代码实际上是 const { bar } = fn();
但虚构的“解构检测”必须将其标记为未解构。或者它将 fn()
的执行标记为用作解构的一部分?最终,这会遇到同样的问题,即它需要先了解代码将如何执行,然后才能确定它。
更多资讯:
在 JavaScript 中没有这样的语法可以帮助你。
但是,我认为您可以通过使用另一个功能轻松实现您想要的:
function thatReturnsComplexOutput() {
return {a: 'some', b: 'thing'};
}
function thatReturnsOnlyA() {
return thatReturnsComplexOutput().a;
}
const simpleVar = thatReturnsOnlyA();
const {a, b} = thatReturnsComplexOutput();
在 JavaScript 中,您可以使用
typeof
运算符来确定函数的返回值是被解构还是按原样使用。当一个函数的返回值被解构时,它的类型将是一个对象或一个数组。当它按原样使用时,它的类型将取决于函数的返回值。
例如,假设您有一个名为 getPerson() 的函数,它返回一个具有属性名称和年龄的对象。如果你解构函数的返回值,结果的类型将是一个对象:
const { name, age } = getPerson();
console.log(typeof { name, age }); // "object"
另一方面,如果按原样使用函数的返回值,类型将取决于函数的返回值。例如,如果
getPerson()
返回一个字符串,则结果的类型将是一个字符串:
const name = getPerson();
console.log(typeof name); // "string"
因此,简而言之,您可以使用
typeof
通过检查分配给函数返回值的值的类型来确定函数的返回值是否被解构或按原样使用。