ES6 数组解构时不加分号引发的问题

编程入门 行业动态 更新时间:2024-10-27 01:23:59

ES6 数组解构时不加<a href=https://www.elefans.com/category/jswz/34/1740594.html style=分号引发的问题"/>

ES6 数组解构时不加分号引发的问题

问题代码

let value1 = 0
let value2 = 0
let value1_1 = '', value1_2 = '', value1_3 = '', value2_1, value2_2, value2_3function myhandle(cur, pre) {let s = '', c = '', r = ''if (parseInt(cur) - parseInt(pre) < 0) {s = '-'c = 'decrease'r = Math.abs(parseInt(cur) - parseInt(pre))} else if (parseInt(cur) - parseInt(pre) === 0) {s = ''c = ''r = "不增不减"} else {s = '+'c = 'increase'r = parseInt(cur) - parseInt(pre)}return [c, s, r]
}[value1_1, value1_2, value1_3] = myhandle(1, 2)
[value2_1, value2_2, value2_3] = myhandle(3, 2)console.log(value1_1, value1_2, value1_3, value2_1, value2_2, value2_3);

预期正确输出

decrease - 1 increase + 1

实际输出结果

increase + 1 undefined undefined undefined

原因探究

由于没有在适当的行尾加上分号,导致下面的代码被误读:

[value1_1, value1_2, value1_3] = myhandle(1, 2)
[value2_1, value2_2, value2_3] = myhandle(3, 2)

被语法解释器解释成

[value1_1, value1_2, value1_3] = myhandle(1, 2)[1, 2, 3] = [4, 5, 6]

上面这行代码并不会报错,并且会将末尾的 [4, 5, 6] 赋值给 [value1_1, value1_2, value1_3]
这样就引发了直接打印 [value1_1, value1_2, value1_3] 的结果不等于 myhandle(1, 2) 的返回值。

可以通过尝试下面的代码:

let hello = [2131, 234]
console.log(hello
[0]
)// 输出 2131

发现是因为 js 的语法解释器支持比较强的跨行数组索引语法,使得不加分号情况下可能会出现出人意料的情况。
一般开发的项目中,会通过插件配置自动添加在行尾添加分号来规避上面的问题。但是如果单纯写 js 代码
到 node 中运行就可能需要注意分号的问题。

有时项目配置的是保存时自动移除分号,又需要写出上面的赋值语句怎么办?

我和朋友讨论是要看你的项目有没有配置了 js 代码压缩,如果配置了压缩代码,那么说明你的项目代码最终
也是会在行尾帮你加上分号后再压缩(没分号怎么压缩代码)。

结论

写 js 代码一定要注意行尾分号问题,如果用的语句组合比较复杂,那么最好在行尾加上分号增强代码可读性。

更多推荐

ES6 数组解构时不加分号引发的问题

本文发布于:2023-12-08 03:35:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1672238.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:分号   数组   不加

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!