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
相关产品推荐
相关产品推荐

