You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript数组解构链式调用报错,求原因分析与修正方案

问题原因分析

这个错误的根源是JavaScript自动分号插入(ASI)的坑!

看你代码里的这段:

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

由于上一行的console.log语句结尾没有加分号,JavaScript会把这两行解析成一行代码:

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

这里的[hr, min]是逗号表达式,结果等于min的值(也就是9250),所以相当于试图执行:

undefined[9250] = integerDivide(min, 60)

而console.log的返回值是undefined,你自然不能给undefined设置属性,所以就抛出了Cannot set property '9250' of undefined这个错误。

修正方案

有两种简单的办法可以解决这个问题:

  • 给上一行的console.log语句加上分号:

    console.log(`min: ${min}`); // 这里加上分号,避免ASI错误
    [hr, min] = integerDivide(min, 60)
    
  • 在开头的方括号前加上分号:
    有些开发者习惯在以[或(开头的行前加分号,来避免这种ASI问题:

    console.log(`min: ${min}`)
    ;[hr, min] = integerDivide(min, 60) // 开头加分号
    

另外,也可以统一给所有语句都加上分号,从根源上避免这类ASI相关的语法错误。

测试一下修正后的代码,就能正常输出:

sec: 3
min: 9250
hr: 154

内容的提问来源于stack exchange,提问作者Dev Khadka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:32:34