当前位置: 首页 > news >正文

Javascript中,const [opcode, ...operands] =数组的具体用法

在 JavaScript 中,const [opcode, ...operands] = 数组; 使用的是 数组解构赋值 (Array Destructuring) 结合 剩余参数语法 (Rest Syntax)

具体含义

这行代码的作用是将一个数组“拆分”成两部分:
  1. opcode:获取数组的 第一个元素
  2. operands:获取数组中 剩余的所有元素,并将它们组成一个新的数组。

代码示例

// 场景 1: 数组有多个元素
const instruction1 = ['ADD', 10, 20, 30];
const [opcode1, ...operands1] = instruction1;console.log(opcode1);    // 输出: 'ADD' (第一个元素)
console.log(operands1);  // 输出: [10, 20, 30] (剩余元素组成的新数组)// 场景 2: 数组只有两个元素
const instruction2 = ['SUB', 5, 8];
const [opcode2, ...operands2] = instruction2;console.log(opcode2);    // 输出: 'SUB'
console.log(operands2);  // 输出: [5, 8]// 场景 3: 数组只有一个元素
const instruction3 = ['HALT'];
const [opcode3, ...operands3] = instruction3;console.log(opcode3);    // 输出: 'HALT'
console.log(operands3);  // 输出: [] (空数组,因为没有剩余元素)// 场景 4: 空数组 (注意:这会导致 opcode 为 undefined)
const instruction4 = [];
const [opcode4, ...operands4] = instruction4;console.log(opcode4);    // 输出: undefined
console.log(operands4);  // 输出: []

关键点总结

  • 位置固定...operands 必须放在解构模式的最后(或者紧跟在你要提取的特定索引之后),因为它会“吃掉”后面所有的剩余项。
  • 总是数组:无论剩余多少个元素(即使是 0 个),operands 永远是一个 数组 (Array) 类型。
  • 不可变性:由于使用了 constopcodeoperands 这两个变量本身不能被重新赋值,但 operands 数组内部的内容是可以修改的(除非使用 Object.freeze)。

第三条中的const 关键字最容易被误解的核心概念,下面展开解释一下:

为了更透彻地理解,我们可以把变量想象成“标签”,把数据想象成“盒子”

1. 核心区别:引用 vs 内容

  • const 锁定的是“标签”贴在哪里(即变量的引用地址)。
    • 一旦贴上,你就不能把这个标签撕下来贴到另一个盒子上(不能重新赋值)。
  • const 不锁定“盒子”里的东西
    • 如果盒子里装的是对象或数组,你依然可以打开盒子,往里面添加、删除或修改物品(修改内部属性/元素)。

2. 代码演示

让我们通过代码看看什么能做,什么不能做:
const [opcode, ...operands] = ['ADD', 10, 20];// ✅ 允许:修改数组内部的内容
operands.push(30);        // 现在 operands 是 [10, 20, 30]
operands[0] = 999;        // 现在 operands 是 [999, 20, 30]
operands.pop();           // 现在 operands 是 [999, 20]console.log(operands);    // 输出: [999, 20]// ❌ 禁止:重新赋值给一个新数组
// 这相当于想把 'operands' 这个标签撕下来,贴到一个全新的数组上
try {operands = [1, 2, 3]; 
} catch (e) {console.error("报错:", e.message); // 输出: 报错: Assignment to constant variable.
}// ❌ 禁止:重新赋值 opcode
try {opcode = 'SUB';
} catch (e) {console.error("报错:", e.message);// 输出: 报错: Assignment to constant variable.
}

3. 如何实现真正的“不可变”?

如果你希望连数组内部的内容也不能修改(即实现深层次的不可变性),你需要使用 Object.freeze()
const [opcode, ...rawOperands] = ['ADD', 10, 20];// 使用 Object.freeze 冻结数组
const operands = Object.freeze(rawOperands);// ✅ 读取正常
console.log(operands[0]); // 10// ❌ 修改无效 (在严格模式下会报错,非严格模式下静默失败)
operands.push(30);        
console.log(operands);    // 依然是 [10, 20],长度没变operands[0] = 999;        
console.log(operands);    // 依然是 [10, 20],第一个值没变

 

操作类型 代码示例 const 保护了吗? 结果
修改变量指向 operands = [...] ✅ 是 抛出 TypeError
修改数组元素 operands[0] = 1 ❌ 否 修改成功
增删数组元素 operands.push(1) ❌ 否 修改成功
完全冻结 Object.freeze(operands) ✅ 是 (配合使用)

任何修改都失败

 

http://www.jsqmd.com/news/436250/

相关文章:

  • 2026年口碑好的定制挂衣杆 工厂推荐:皮革挂衣杆/加厚挂衣杆/高定挂衣杆厂家推荐哪家好 - 行业平台推荐
  • DDPG算法
  • OpenClaw Hooks 使用指南
  • 聚焦环保全屋定制:2026国内最新适配家装柜体需求的十大实木板厂家 - 十大品牌榜
  • 微信个人号接口二次开发
  • 2026年比较好的新型建材 品牌推荐:新型建材值得信赖的生产厂家 - 行业平台推荐
  • AI Agent与软件行业的结构性变化
  • 2026年CPVC电力管优质厂家榜单 实力强口碑好 适配多场景电力工程 - 深度智识库
  • 2026年全国CPVC电力管哪家优质?口碑好实力强适配各类电力工程 - 深度智识库
  • 聚焦健康环保全屋定制:2026国内最新适配家装柜体需求的十大板材源头厂家 - 十大品牌榜
  • linux 安装 zerotier,加入网络
  • 273_尚硅谷_管道的关闭和遍历
  • 详细介绍:【愚公系列】《AI短视频创作一本通》012-AI 短视频分镜头设计(AI绘画提示词入门)
  • 2026年评价高的办公空间设计 品牌推荐:厂房装修设计/办公装饰设计/上海工装设计生产厂家推荐几家 - 行业平台推荐
  • AI搜索流量突围|武汉GEO优化不踩坑:干货指南+优质服务商解析 - 品牌评测官
  • 全国回收字画的公司怎么选?远程上门,专业服务更省心 - 品牌排行榜单
  • 最新AI员工OpenClaw 30分钟部署全攻略 7x 24小时在线、随时响应的AI助手
  • 热电堆放大电路传递函数
  • 2026哪个平台买机票便宜?主流平台实用测评 - 品牌排行榜
  • 2026塑料模板厂家哪家好:五大品牌推荐,涵盖塑钢模板、钢模板租赁、钢模板厂家、二手钢模 - 深度智识库
  • 热电堆信号放大电路仿真
  • flutter: listview显示时报错Vertical viewport was given unbounded height
  • 2026年靠谱的衣柜柜内灯 厂家推荐:线性柜内灯/橱柜柜内灯/任意切柜内灯实力品牌厂家推荐 - 行业平台推荐
  • 2026年靠谱的生鲜食品包装机 品牌推荐:卧式食品包装机/糕点食品包装机/全自动食品包装机口碑好的厂家推荐 - 行业平台推荐
  • 聚焦全屋定制环保品质:2026国内最新适配家装柜体需求的十大多层板品牌 - 十大品牌榜
  • 2026年评价高的辊道通过式抛丸机 工厂推荐:江苏板簧强化抛丸机厂家 - 行业平台推荐
  • C++实现窗函数
  • 2026订机票哪家平台好?主流平台功能与优惠对比 - 品牌排行榜
  • 2026徐州装修公司哪家好?本地口碑企业推荐 - 品牌排行榜
  • 警惕!XSS攻击的4大真实危害,比你想象中更可怕(附案例)