Javascript 定义JS中第一个元素为空的数组
我看到有一个数组被定义为[,el1,el2],我从未见过这样定义数组的方法。如果我这样定义,是否意味着第一个元素未定义Javascript 定义JS中第一个元素为空的数组,javascript,arrays,Javascript,Arrays,我看到有一个数组被定义为[,el1,el2],我从未见过这样定义数组的方法。如果我这样定义,是否意味着第一个元素未定义 const targetItems = [1, 2, 3, a, b, c].map( items=>{ const matches = itmes.match([a-z]) const [, targetItems , remainItems] = matches }) 在这种情况下,匹配项应该是[a,b,c],但是最终的数组应该是什么样的呢 线路
const targetItems = [1, 2, 3, a, b, c].map( items=>{
const matches = itmes.match([a-z])
const [, targetItems , remainItems] = matches
})
在这种情况下,匹配项应该是[a,b,c]
,但是最终的数组应该是什么样的呢 线路
const [, targetItems, remainItems] = matches
不创建(或“定义”)数组。它将数组转换为单个变量(本例中为常量)。这相当于:
const targetItems = matches[1];
const remainItems = matches[2];
const targetItems = matches[1]
const remainItems = matches[2]
由于第一个位置(在[
之后和,
之前)没有标识符名称,因此第一个条目(匹配[0]
)不会存储在任何位置
这称为数组分解(JavaScript也有对象分解)
…最终阵列应该是什么样子
在该代码中,targetItems
将是一个六项数组,其中所有项都包含值undefined
,因为map
回调从不返回值,因此调用它会导致undefined
。回调应使用return
返回值(或者使用带有隐式返回的arrow函数的简明形式,但不能使用其中的语句)
但是,在现代JavaScript中,在数组初始值设定项中省略条目是有效的:
const a=[,“一”,“二”,“四];
console.log(a.length);//5
console.log(a[0]);//未定义
console.log(a中的0);//false(因为根本没有条目)
console.log(a[1])/“一”
console.log(a中的1);//true
这是一个数组声明,而不是数组声明。此代码:
const [, targetItems , remainItems] = matches
相当于:
const targetItems = matches[1];
const remainItems = matches[2];
const targetItems = matches[1]
const remainItems = matches[2]
基本上是创建两个变量,将它们绑定到数组中第二个和第三个元素的值。使用逗号可以跳过不感兴趣的元素。还可以使用扩展语法,例如:
const [, x, , y, ...end] = ['a','b','c','d','e', 'f']
console.log(x) // "b"
console.log(y) // "d"
console.log(end) // ["e", "f"]
也就是说,您完全可以创建具有空插槽的阵列:
const arr = [, 10];
在这种情况下,匹配项应该是[a,b,c],但最终的数组应该是什么样子
在您发布的代码中,数组函数没有return
(使用括号以便需要语句),因此数组将映射到每个元素的undefined
更新
const matches = itmes.match([a-z])
假设itmes
是items
的输入错误,我也会假设items.match([a-z])
实际上是items.match(/[a-z]/)
,因为它在其他情况下没有意义——将regexp作为参数,即使使用类型强制,代码与regexp输入错误相比也没有意义
但是,即使在这种情况下,代码也无法工作,因为match
只返回一个元素,这使得整个解构过程毫无用处–返回的唯一元素是丢弃的元素。此外,它只返回一个字母
我相信原始代码会略有不同(例如,regexp有一个全局标志,和/或一些量词,如“+”);因此,很难从提供的代码中找出最终结果。和adiga的可能重复可能是正确的,尽管问题的最后一句问了一些其他问题。确实有点不清楚。