当我做的时候
const arrayLike = { 1:'foo', 2:'bar', length:2 };
Array.from(arrayLike);
我明白了
[ undefined, 'foo' ]
当我这样做
const arrayLike = { 1:'foo', 2:'bar', length:3 };
Array.from(arrayLike)
我明白了
[ undefined, 'foo', 'bar' ]
- 为什么我在设置长度时看不到
bar
? - 为什么只有当我将长度硬设置为 3 时,我才能看到我的元素?
- 为什么第一个元素显示为
undefined
?
最佳答案
数组在 JavaScript 中是 0
索引
所有这些问题的答案都非常简单。 Array.from
假设您给它的类数组对象是零索引的。如果不是,您将获得一个零索引的数组,其中包含所有未设置的元素,包括 0
设置为 undefined
。所以在你的例子中,
const arrayLike = { 1:'foo', 2:'bar', length:2 };
Array.from(arrayLike);
本质上是一样的,
const arrayLike = { 0:undefined, 1:'foo', 2:'bar', length:2 };
Array.from(arrayLike);
因为长度小于最大元素,它基本上在该点停止迭代,并且假长度起到 chop 的作用。你想要的很可能,
const arrayLike = { 0:'foo', 1:'bar', length:2 };
Array.from(arrayLike);
或者,如果您从索引为 1 的源中获取类数组,请适当设置 length
以免丢失最后一个元素,然后从结果中删除第一个元素(相当于 shift
)。
const arrayLike = { 1:'foo', 2:'bar', length:3 };
let arr = Array.from(arrayLike).splice(1);
let arr = Array.from(arrayLike);
arr.shift();
let [, ...arr] = Array.from(arrayLike);
关于javascript - 为什么 Array.from() 返回第一个元素未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45040639/