JavaScript解构赋值报错:重复声明‘hour’,如何解决?
解决解构赋值中重复声明变量的错误
这个报错原因很直白:你在同一个作用域里用const重复声明了hour和minute这两个变量——第一次从event.start_date_details解构时定义了它们,第二次从event.end_date_details解构又用了相同的变量名,JS不允许同一作用域内重复声明同一个const(或者let)变量。
结合你的Events JSON数据,给你几个可行的解决办法:
1. 给结束时间的变量重命名(最推荐)
直接在解构结束时间时,给变量起不同的名字,同时注意修正你代码里的一个小错误:你的JSON里分钟字段是minutes(带s),不是minute,之前的写法会导致变量拿到undefined。另外还要注意,你的JSON里start_date_details并没有startYear、startMonth这类字段,实际是year、month,之前的写法也会拿不到正确值。修正后的代码如下:
// 解构开始时间,匹配JSON实际字段 const { year, month, day, hour: startHour, minutes: startMinute } = event.start_date_details; // 解构结束时间时重命名,避免变量冲突 const { hour: endHour, minutes: endMinute } = event.end_date_details;
2. 合并解构语句,一次性完成赋值
如果想更简洁,可以把两个对象的解构合并到同一个const声明里,这样自然不会有重复声明的问题:
const { start_date_details: { year, month, day, hour: startHour, minutes: startMinute }, end_date_details: { hour: endHour, minutes: endMinute } } = event;
3. 用块级作用域隔离变量(特殊场景用)
如果一定要在代码里用相同的变量名,可以把其中一次解构放到单独的代码块中,利用块级作用域隔离变量(注意这里要用let,因为const在块级作用域里也不能重复声明):
const { year, month, day, hour: startHour, minutes: startMinute } = event.start_date_details; // 用块级作用域包裹结束时间的解构 { let { hour: hour, minutes: minute } = event.end_date_details; // 在这里使用结束时间的hour和minute,不会和外部的变量冲突 console.log('结束时间:', hour, minute); }
内容的提问来源于stack exchange,提问作者Bomber
相关产品推荐
相关产品推荐

