【问题标题】:Destructuring in javascriptjavascript中的解构
【发布时间】:2018-06-25 09:43:42
【问题描述】:

我有以下代码

let obj={ n:1, j:'test' };
obj[j] = 'new val' ;
let { j } = obj;
alert(j);//'test'

为什么输出仍然是旧值。

【问题讨论】:

  • 因为您无法访问obj[j],因为没有定义j。试试obj.j
  • 当我运行它时,我得到Uncaught ReferenceError: j is not definedobj 不变。
  • 添加,也许你应该使用obj['j']obj.j
  • 知道了,这是一个无用的问题。刚开始 javascript 搞糊涂了。

标签: javascript javascript-objects


【解决方案1】:

在第二行中,当你想设置obj[j] 时,j 没有定义,因为你想通过一个单独的变量访问obj.j,称为j

obj[j] = 'new val';

如果你想访问obj.j,在 JavaScript 中有 2 个选项:

  • 通过.key:obj.j
  • 通过['key']:obj['j']

像这样使用 JavaScript 的destructuring

let obj = { n: 1, j: 'test' };
obj.j = 'new val';

// access one of them
(() => {
  let { j } = obj;
  console.log(j); // 'test'

  let { n } = obj;
  console.log(n); // 1
})();

// access multiple
(() => {
  let { n, j } = obj;
  console.log(n, j); // 1, 'test'
})();

// access via rest
(() => {
  let { ...rest } = obj;
  console.log(rest); // { n: 1, j: 'test' }
})();

【讨论】:

    【解决方案2】:

    由于你没有显示j的初始值,我假设它是undefined,所以你正在做的是设置obj[undefined],这是行不通的。这些中的任何一个都应该符合您的意思:

    obj.j = 'new val'
    obj['j'] = 'new val'
    

    【讨论】:

      【解决方案3】:

      语法错误

      正确的方法是:

      let obj={ n:1, j:'test' };
      obj.j = 'new val' ;
      let { j } = obj;
      alert(j);//'test'
      

      let obj={ n:1, j:'test' };
      let foo = 'j'
      obj[foo] = 'new val' ;
      let { j } = obj;
      alert(j);//'test'
      

      所以,[]中的单词表示变量

      【讨论】:

        【解决方案4】:

        您需要在j 周围加上引号,否则它会被视为变量。

        let obj={ n:1, j:'test' };
        obj['j'] = 'new val' ;
        alert(obj);//'test'
        

        【讨论】:

          猜你喜欢
          • 2017-11-20
          • 2019-02-11
          • 2023-03-29
          • 2017-12-15
          • 1970-01-01
          • 1970-01-01
          • 2012-08-22
          • 1970-01-01
          • 2018-06-12
          相关资源
          最近更新 更多