JavaScript Array.prototype.fill:参数的含义

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript Array.prototype.fill:参数的含义相关的知识,希望对你有一定的参考价值。

MDN上的文档表明Array.prototype.fill的语法是:

Array.prototype.fill(value[, start[, end]])

这个例子

console.log([1, 2, 3].fill(4, 1, 1));         // [1, 2, 3]

在文档中,我的测试同意评论的答案。

但是,我看不出这是怎么回事。参数表明通过1的索引1应填充4。索引1具有2的值,所以我应该有结果应该是[1,4,3]

什么是startend参数的正确解释?

更新

下面接受的答案表明结束指数不包括在内。 MDN上没有提到这一点,尽管有另一种方法(slice)。

我冒昧地更新了MDN文章。

答案
console.log([1, 2, 3].fill(4, 1, 1));

第一个参数4是要填充的值。第二个参数1是起始索引(从哪里开始)。第三个论点1是结束索引,它是独占的。

所以如果你这样做:console.log([1, 2, 3].fill(4, 0, 3));

它将从索引[1,2,3](值0)开始填充1数组,并将所有值覆盖到2的索引,因为我们说3是独占的。

结果将是:[4, 4, 4]

另一答案

如果您阅读polyfill代码,您将看到以下代码:

var k = relativeStart < 0 ?
  Math.max(len + relativeStart, 0) :
  Math.min(relativeStart, len);

// Steps 9-10.
var end = arguments[2];
var relativeEnd = end === undefined ?
  len : end >> 0;

// Step 11.
var final = relativeEnd < 0 ?
  Math.max(len + relativeEnd, 0) :
  Math.min(relativeEnd, len);

// Step 12.
while (k < final) {

如你所见,它说while (k < final)。在您的情况下,kfinal都具有相同的值,因此不会发生突变。


如果将参数更改为不相同,您将看到差异。

console.log([1, 2, 3].fill(4, 1, 2));
另一答案

简单来说

console.log([1, 2, 3].fill(4, 1, 1));  

第二个和thid参数只是在你的情况下通过减法计算的要填充的数组的长度1-1是0所以如果你只想填充你必须使用的第二个,它将不会填充任何东西

console.log([1, 2, 3].fill(4, 1, 2)); 

以上是关于JavaScript Array.prototype.fill:参数的含义的主要内容,如果未能解决你的问题,请参考以下文章

Create React App 如何允许 Array.prototype.at() 而 TypeScript 不允许?

js 自带的 map() 方法

JavaScript介绍

javascript的题。

javascript JavaScript isset()等效: - JavaScript

JavaScript 使用JavaScript更改CSS(JavaScript)