在不指定其属性的情况下解构对象
Destructuring an object without specifying its properties
是否有一种优雅的解决方案可以在不指定对象的所有属性的情况下解构对象?
我想知道是否可以使用展开运算符,但似乎不可能,因为对象不是数组!
我想盲目声明变量可能被认为是个坏主意,但我认为这对非常大的对象很有用。
这是 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 版本:你真的不想要这个,它会让你的代码变得脆弱,难以阅读和重构。只需使用 "normal" 解构语法挑选你想要分开的部分。
是否有一种优雅的解决方案可以在不指定对象的所有属性的情况下解构对象?
我想知道是否可以使用展开运算符,但似乎不可能,因为对象不是数组!
我想盲目声明变量可能被认为是个坏主意,但我认为这对非常大的对象很有用。
这是 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 版本:你真的不想要这个,它会让你的代码变得脆弱,难以阅读和重构。只需使用 "normal" 解构语法挑选你想要分开的部分。