gpt4 book ai didi

javascript - 数组键和填充

转载 作者:行者123 更新时间:2023-11-28 18:19:52 25 4
gpt4 key购买 nike

我发现 js 的以下行为有点奇怪,无法找出为什么会发生这种情况。

让我们假设以下代码:

var arrayName = new Array(15);
console.log(arrayName);

这将输出 [undefine, undefined, undefined, ... ](未定义 15 次)。

现在让我们使用以下代码:

var arrayName = new Array(15).fill();
console.log(arrayName);

由于没有为 fill 提供参数,因此将输出(如预期)[undefine, undefined, undefined, ... ](未定义 15 次)。

现在让我们在数组中添加一个循环(使用 for in 格式,而不是增量循环):

var arrayName = new Array(15);
console.log(arrayName);
for (var i in arrayName) {
console.log(i);
}

这不会输出任何内容(这并不是我所期望的真正原因 - 我期望从 0 到 14 的数字)

现在让我们使用带有 fill 的代码:

var arrayName = new Array(15).fill();
console.log(arrayName);
for (var i in arrayName) {
console.log(i);
}

这将输出 0, 1, 2, ..., 14(这两种情况都是我所期望的)。

那么...为什么会有差异?

我认为第一种情况下没有创建索引(但仍然输出未定义的元素......为什么?)。这是语言不一致还是背后有某种逻辑?

附注将鼠标移到空白框上即可查看内容。

最佳答案

基本上:不要在数组上使用 FOR.IN! : http://ilikekillnerds.com/2015/02/stop-writing-slow-javascript/

for.in 用于对象。甚至 MDN 也声明了这一点:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

数组已创建并且有一些索引,但由于没有任何实际数据(未定义),那么为什么会有任何键?

//The difference is in enumerable keys:

console.log(Object.keys(new Array(15))); //Produces no keys since no data is allocated
console.log(Object.keys(new Array(15).fill())); //Produces 15 keys

//What you probably want is to loop through the allocated places in the array, not the keys of it:
for(var i = 0; i < new Array(15).length; i++) {
console.log(i)
}

这是为什么?

你尝试过Object.create吗?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create

//Allocating a new object
var test = Object.create({}, {
p: {
value: 42
}
});

//Logging object... but where is p?
console.log("where is p?",test);

//there it is :)
console.log("there it is",test.p);

//Lets try that again
test = Object.create({}, {
p: {
value: 42,
enumerable: true
}
});

//Logging object... and there is p
console.log("All good",test);

//New object values are non-enumerable by default. Also on Arrays

关于javascript - 数组键和填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40085342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com