javascript在初始化之前无法访问“ a”

时间:2020-06-23 05:16:00

标签: javascript

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'。

您看到可以解决此问题的任何方式吗?

2 个答案:

答案 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)