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

JavaScript ES6解构赋值数组空位逗号取值规则疑问

ES6解构赋值匹配逻辑解答

数组解构:按位置严格匹配,和变量名无关

数组解构的匹配逻辑完全不看你起什么变量名,只认你写的解构表达式里的位置,逗号就是纯粹的「空位占坑符」,用来跳过不需要的元素。
你代码里的var [,b] = foo()逻辑非常直白:

  • 第一个逗号前是空位,代表跳过数组索引0对应的第一项(也就是返回值里的1),不做任何赋值
  • 逗号后的b对应数组索引1的位置,也就是数组第二项,自然会被赋值为2,这是明确的语法规则,不是什么隐式转换。

你在这里写什么变量名都不影响匹配结果:就算把b换成z、换成任意合法变量名,只要前面有1个逗号占了第一个位置的坑,拿到的永远是数组第二项,根本不会对应所谓的第26项。如果真要拿数组第26项,你得在变量前面写满25个逗号,占完前25个位置的坑才行,比如[,,,,,,,,,,,,,,,,,,,,,,,,, twentySix] = 长度够的数组,这时候才能取到索引为25的第26个元素。

给个验证示例:

function foo() { return [1,2,3]; }
var [, z] = foo(); // 这里变量名叫z
console.log(z); // 输出2,根本不会去拿什么第26项
var [, , third] = foo(); // 两个逗号占前两个位置
console.log(third); // 输出3

对象解构:按属性名匹配,和书写顺序无关

和数组解构的逻辑完全相反,对象解构不看书写顺序,只认属性名:解构表达式里写的变量名,会去右侧对象里找同名的属性,找到就把属性值赋给变量,找不到就是undefined。
你代码里的var { x, z } = bar()逻辑也很清晰:

  • 不管你先写x还是先写z,引擎只会去bar返回的对象里找x和z两个属性,对应拿到4和6,中间的y属性因为你没在解构里写,直接跳过
  • 就算你把顺序反过来写var {z, x} = bar(),最后打印的结果依然是x=4、z=6,和书写顺序没有任何关系。

示例里最后console输出2 4 6完全符合上面的两套规则,没有任何特殊的隐式逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:24:15