javascript - 在不指定其属性的情况下解构对象

标签 javascript ecmascript-6 destructuring

是否有一种优雅的解决方案可以在不指定对象的所有属性的情况下解构对象?

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

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

最佳答案

这是 with(){} 构造所允许的:

var obj = {a: 1};
with (obj) {
  console.log(a);
}

然而,这种构造被严重劝阻并且基本上被弃用(它在严格模式下抛出错误),因为它有一些主要缺点:

  • 您的代码难以阅读,因为无法区分 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"
}

TL;DR 版本:你真的不想要这个,它会让你的代码变得脆弱,难以阅读和重构。只需使用“正常”解构语法挑选你想要分开的部分。

关于javascript - 在不指定其属性的情况下解构对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36797532/

相关文章:

javascript - 是否可以解构为已声明的变量?

ecmascript-6 - 谁能向我解释为什么以下两个箭头函数是等价的?

JavaScript 函数在获取文本框的值时出现 Uncaught ReferenceError

javascript - Firebase 的云功能 - 将 FCM 消息发送到多个 token

javascript - 无焦点输入拖放jquery

javascript - ES6解构函数参数——命名根对象

javascript - 我需要从 Angular 2 中的其他组件获取公共(public)方法

javascript - 从对象中删除属性而不创建新属性(无删除操作)

javascript - 我们可以覆盖 Javascript DOM 对象原型(prototype)属性吗?

javascript - ES6/下一个 : object destructuring with rest - grouping