解析对象而不指定其属性

ala*_*nan 3 javascript destructuring ecmascript-6

是否有一个优雅的解决方案来解构对象而不指定所有对象的属性?

我想知道是否可以使用扩展运算符,但似乎这是不可能的,因为对象不是数组!

我想盲目声明变量可能被认为是一个坏主意,但我认为这对非常大的对象很有用.

Ven*_*Ven 7

这就是with(){}施工所允许的:

var obj = {a: 1};
with (obj) {
  console.log(a);
}
Run Code Online (Sandbox Code Playgroud)

但是,这种结构非常不鼓励并且基本上已弃用(它在严格模式下会抛出错误),因为它有一些主要缺点:

  • 您的代码难以阅读,因为无法分辨1)外部范围的变量2)局部变量3)来自对象的属性.

  • 您的代码无法优化,因为JavaScript引擎无法分辨您的变量来自何处.

  • 你的代码很难重构,因为如果你向你引入一个属性obj,它可能会影响一些现有的局部变量,例如:


var obj = {};
var a = 1;
addSomeProperties(obj);
with (obj) {
  console.log(a); // the result here depends on whether or not "addSomeProperties" puts a property named "a" on "obj"
}
Run Code Online (Sandbox Code Playgroud)

TL; DR版本:你真的不想要这个,它会使你的代码变得脆弱,难以阅读和重构.只需使用"普通"解构语法选择您想要的部分.

  • *"但是这种结构受到严重阻止,基本上已弃用"*它也会在严格模式下抛出错误. (2认同)