Array.isArray 说是假的

wal*_*lee 1 javascript arrays json object destructuring

我是一个新的 javascript 学习者,目前正在学习解构。我的问题是在我编辑了一点的片段中。控制台说它是一个数组,但我不认为它应该是?

1:这怎么不是数组?

const heroes = [{
  lol: ['l', 'Iron Man']
}]

const [lol, dc] = heroes;
console.log(Array.isArray(lol)); 
Run Code Online (Sandbox Code Playgroud)

2:这个怎么是一个数组?

const heroes = {
  lol: ['l', 'Iron Man']
}

const {lol, dc} = heroes;
console.log(Array.isArray(lol));
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 6

在第一个片段中,heroes是一个数组。数组的第一个元素是对象

{
 lol:['l', 'Iron Man' ]
}
Run Code Online (Sandbox Code Playgroud)

解构赋值设置lol为此元素,并设置dcundefined因为数组中没有第二个元素。上面的对象不是数组,所以Array.isArray(lol)是假的。

{
 lol:['l', 'Iron Man' ]
}
Run Code Online (Sandbox Code Playgroud)

在第二个片段中,heroes是一个对象。解构赋值设置lollol对象中属性的值,即['l', 'Iron Man']。它设置dcdc属性;因为它不存在,所以它被设置为undefined. Since lol is set to an array,Array.isArray(lol)` 是真的。

如果要设置lol为第一个片段中的数组,则需要另一层嵌套。

const heroes = [{
 lol:['l', 'Iron Man' ]
}]

const [element1, element2 ] = heroes;
console.log(element1); 
Run Code Online (Sandbox Code Playgroud)

  • 正确的。当你解构一个对象时,变量名与属性相匹配。但你也可以写“const [{ lol: someVar}] = Heroes”。它使用“lol”作为属性名称,“someVar”作为变量名称。`{lol}` 是 `{lol: lol}` 的缩写,并使用属性名称作为变量名称。 (2认同)