r = {
name:'Bart',
location:'Springfield'
}
for(var a in r) {
if (r.hasOwnProperty(a)) {
console.log(a);
const {a} = r[a]; // Here's where it's failing.
//I'm trying to do the equivalent of const{name} = r[a];
}
}
console.log(name) //Expecting output `Bart`
在尝试分解对象时,我尝试了上面的操作。但是,这给了我'Uncaught ReferenceError:初始化之前无法访问'a'。
您看到可以解决此问题的任何方式吗?
答案 0 :(得分:3)
在此行
const {a} = r[a];
您正试图定义一个新变量a
,该变量取决于使用a
来访问r
的属性。
此外,const { a }
表示您正在尝试访问r [a]的属性a
。仅当r[a]
返回一个对象时,该对象也具有自己的键来进行解构,如下所示:
r = {
name: { a: 'Bart' },
location: { a: 'Springfield' }
}
在您的代码r[a]
中将返回均为字符串的值。这意味着它们没有您可以解构的属性a
。
在这种情况下,我假设您只是要将其分配给变量,而不是进行破坏
为避免该错误,请尝试避免命名冲突,方法可能是使用更具可读性的变量名,并跳过如下的解构操作:
for(var key in r) {
if (r.hasOwnProperty(key)) {
console.log(key);
const a = r[key];
}
}
答案 1 :(得分:0)
r = {
name:'Bart',
location:'Springfield'
}
r.name
包含'Bari'
(字符串类型)值,没有任何对象值。因此,由于const {a} = r[a]
不是对象,所以析构会在您的语句r[a]
中引起问题。请记住, const 和 let 始终是作用域绑定的。
可能的解决方法如下:
var r = {
name:'Bart',
location:'Springfield'
}
for(var a in r) {
if (r.hasOwnProperty(a)) {
globalThis[a] = r[a];
}
}
console.log(name)