【问题标题】:Javascript array destructuring gives error when chaining [duplicate]链接时,Javascript数组解构会出错[重复]
【发布时间】:2020-10-19 11:51:01
【问题描述】:

我有以下代码

const integerDivide = (a, b) => {
  return [Math.floor(a / b), a % b]
}


let sec = 555003,
  min, hr, day;

[min, sec] = integerDivide(sec, 60)
console.log(`sec: ${sec}`)
console.log(`min: ${min}`)
[hr, min] = integerDivide(min, 60)
console.log(`hr: ${hr}`)

此代码给出以下错误

Uncaught TypeError: Cannot set property '9250' of undefined

我不明白为什么这段代码不起作用。任何解释或更正将不胜感激。下面是代码笔链接 https://codepen.io/devbkhadka/pen/ExyyEWE?editors=1111

【问题讨论】:

    标签: javascript ecmascript-6 syntax


    【解决方案1】:

    您需要一些分号来防止使用方括号作为属性访问器,因为 ASI(自动分号插入)在这里不起作用。

    如果你把这个写成一行,你就直接看到了:

    console.log(`min: ${min}`)[hr, min] = integerDivide(min, 60)
    

    换行符不分隔语句,后跟括号。为了克服这个问题,您需要添加分号来分隔语句。

    阅读更多:What are the rules for JavaScript's automatic semicolon insertion (ASI)?

    const integerDivide = (a , b) => {
        return [Math.floor(a/b), a%b]
     }
    
    let sec = 555003, min, hr, day;
    
    [min, sec] = integerDivide(sec, 60)
    console.log (`sec: ${sec}`)
    console.log (`min: ${min}`); // <-- here at least
    [hr, min] = integerDivide(min, 60)
    console.log (`hr: ${hr}`)

    【讨论】:

    • 是的,它有效,但我没有理解您所说的“防止使用方括号作为属性访问器”的意思。你能详细说明一下吗
    • @DevKhadka 自动分号插入不适用于以方括号开头的行。它删除新行并看到console.log(blah)[hr, min]
    猜你喜欢
    • 1970-01-01
    • 2016-10-22
    • 2019-11-22
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    相关资源
    最近更新 更多