ECMA-262 (12th Edition) ECMAScript 2021 Language Specification — page 33
The
Array prototype object
:
is
%Array.prototype%
.
is an
and has the internal methods specified for such objects.
has a
"length"
property whose initial value is
+0
𝔽
and whose attributes are { [[Writable]]:
true
, [[Enumerable]]:
false
, [[Configurable]]:
false
}.
has a [[Prototype]] internal slot whose value is
NOTE
When the
concat
concat
method is called with zero or more arguments, it returns an array containing the array elements of
the object followed by the array elements of each argument.
The following steps are taken:
1. Let
O
be ?
this
value).
2. Let
A
be ?
(
O
, 0).
3. Let
n
be 0.
4. Prepend
O
to
items
.
5. For each element
E
of
items
, do
a. Let
spreadable
be ?
E
).
b. If
spreadable
is
true
, then
i. Let
k
be 0.
ii. Let
len
be ?
(
E
).
iii. If
n
+
len
> 2
53
- 1, throw a
TypeError
exception.
iv. Repeat, while
k
<
len
,
1. Let
P
be !
k
)).
2. Let
exists
(
E
,
P
).
3. If
exists
is
true
, then
a. Let
subElement
be ?
(
E
,
P
).
b. Perform ?
(
A
, !
(
n
)),
subElement
).
4. Set
n
to
n
+ 1.
5. Set
k
to
k
+ 1.
c. Else,
i. NOTE:
E
is added as a single item rather than spread.
ii. If
n
≥
2
53
- 1, throw a
TypeError
exception.
iii. Perform ?
(
A
, !
(
n
)),
E
).
iv. Set
n
to
n
+ 1.
6. Perform ?
(
A
,
"length"
,
(
n
),
true
).
7. Return
A
.
The
"length"
property of the
concat
concat
method is
1
𝔽
.
The Array prototype object is specified to be an
to ensure compatibility with
ECMAScript code that was created prior to the ECMAScript 2015 specification.
23.1.3.1 Array.prototype.concat ( ...
items
)
637
NOTE 1
NOTE 2
The abstract operation IsConcatSpreadable takes argument
O
. It performs the following steps when called:
1. If
(
O
) is not Object, return
false
.
2. Let
spreadable
be ?
(
O
3. If
spreadable
is not
undefined
, return !
spreadable
).
4. Return ?
(
O
).
The initial value of
Array.prototype.constructor
Array.prototype.constructor
is
The
copyWithin
copyWithin
method takes up to three arguments
target
,
start
and
end
.
NOTE 1
The following steps are taken:
1. Let
O
be ?
this
value).
2. Let
len
be ?
(
O
).
3. Let
relativeTarget
be ?
(
target
).
4. If
relativeTarget
is -
∞
, let
to
be 0.
5. Else if
relativeTarget
< 0, let
to
be
(
len
+
relativeTarget
, 0).
6. Else, let
to
be
(
relativeTarget
,
len
).
7. Let
relativeStart
start
).
8. If
relativeStart
is -
∞
, let
from
be 0.
9. Else if
relativeStart
< 0, let
from
len
+
relativeStart
, 0).
10. Else, let
from
(
relativeStart
,
len
).
11. If
end
is
undefined
, let
relativeEnd
be
len
; else let
relativeEnd
be ?
(
end
).
12. If
relativeEnd
is -
∞
, let
final
be 0.
13. Else if
relativeEnd
< 0, let
final
len
+
relativeEnd
, 0).
14. Else, let
final
(
relativeEnd
,
len
).
15. Let
count
be
(
final
-
from
,
len
-
to
).
16. If
from
<
to
and
to
<
from
+
count
, then
a. Let
direction
be -1.
b. Set
from
to
from
+
count
- 1.
The explicit setting of the
"length"
property in step
is necessary to ensure that its value is
correct in situations where the trailing elements of the result Array are not present.
The
concat
concat
function is intentionally generic; it does not require that its
this
value be an Array
object. Therefore it can be transferred to other kinds of objects for use as a method.
The
end
argument is optional with the length of the
this
value as its default value. If
target
is
negative, it is treated as
length
+
target
where
length
is the length of the array. If
start
is negative, it
is treated as
length
+
start
. If
end
is negative, it is treated as
length
+
end
.
23.1.3.1.1 IsConcatSpreadable (
O
)
23.1.3.2 Array.prototype.constructor
23.1.3.3 Array.prototype.copyWithin (
target
,
start
[ ,
end
] )
638
c. Set
to
to
to
+
count
- 1.
17. Else,
a. Let
direction
be 1.
18. Repeat, while
count
> 0,
a. Let
fromKey
be !
(
from
)).
b. Let
toKey
be !
(
to
)).
c. Let
fromPresent
(
O
,
fromKey
).
d. If
fromPresent
is
true
, then
i. Let
fromVal
O
,
fromKey
).
ii. Perform ?
(
O
,
toKey
,
fromVal
,
true
).
e. Else,
i.
:
fromPresent
is
false
.
ii. Perform ?
O
,
toKey
).
f. Set
from
to
from
+
direction
.
g. Set
to
to
to
+
direction
.
h. Set
count
to
count
- 1.
19. Return
O
.
NOTE 2
The following steps are taken:
1. Let
O
be ?
this
value).
2. Return
O
,
key+value
).
The
copyWithin
copyWithin
function is intentionally generic; it does not require that its
this
value be an
Array object. Therefore it can be transferred to other kinds of objects for use as a method.
23.1.3.4 Array.prototype.entries ( )
23.1.3.5 Array.prototype.every (
callbackfn
[ ,
thisArg
] )
639
NOTE 1
When the
every
every
method is called with one or two arguments, the following steps are taken:
1. Let
O
be ?
this
value).
2. Let
len
be ?
(
O
).
3. If
callbackfn
) is
false
, throw a
TypeError
exception.
4. Let
k
be 0.
5. Repeat, while
k
<
len
,
a. Let
Pk
be !
(
k
)).
b. Let
kPresent
(
O
,
Pk
).
c. If
kPresent
is
true
, then
i. Let
kValue
be ?
(
O
,
Pk
).
ii. Let
testResult
(
callbackfn
,
thisArg
, «
kValue
k
),
O
»)).
iii. If
testResult
is
false
, return
false
.
d. Set
k
to
k
+ 1.
6. Return
true
.
NOTE 2
The
fill
fill
method takes up to three arguments
value
,
start
and
end
.
callbackfn
should be a function that accepts three arguments and returns a value that is coercible
to a Boolean value.
every
every
calls
callbackfn
once for each element present in the array, in
ascending order, until it finds one where
callbackfn
returns
false
. If such an element is found,
every
every
immediately returns
false
. Otherwise, if
callbackfn
returned
true
for all elements,
every
every
will return
true
.
callbackfn
is called only for elements of the array which actually exist; it is not
called for missing elements of the array.
If a
thisArg
parameter is provided, it will be used as the
this
value for each invocation of
callbackfn
. If it is not provided,
undefined
is used instead.
callbackfn
is called with three arguments: the value of the element, the index of the element, and
the object being traversed.
every
every
does not directly mutate the object on which it is called but the object may be mutated by
the calls to
callbackfn
.
The range of elements processed by
every
every
is set before the first call to
callbackfn
. Elements
which are appended to the array after the call to
every
every
begins will not be visited by
callbackfn
. If
existing elements of the array are changed, their value as passed to
callbackfn
will be the value at
the time
every
every
visits them; elements that are deleted after the call to
every
every
begins and before
being visited are not visited.
every
every
acts like the "for all" quantifier in mathematics. In particular,
for an empty array, it returns
true
.
The
every
every
function is intentionally generic; it does not require that its
this
value be an Array
object. Therefore it can be transferred to other kinds of objects for use as a method.
23.1.3.6 Array.prototype.fill (
value
[ ,
start
[ ,
end
] ] )
640
NOTE 1
The following steps are taken:
1. Let
O
be ?
this
value).
2. Let
len
be ?
(
O
).
3. Let
relativeStart
start
).
4. If
relativeStart
is -
∞
, let
k
be 0.
5. Else if
relativeStart
< 0, let
k
be
len
+
relativeStart
, 0).
6. Else, let
k
be
(
relativeStart
,
len
).
7. If
end
is
undefined
, let
relativeEnd
be
len
; else let
relativeEnd
(
end
).
8. If
relativeEnd
is -
∞
, let
final
be 0.
9. Else if
relativeEnd
< 0, let
final
len
+
relativeEnd
, 0).
10. Else, let
final
(
relativeEnd
,
len
).
11. Repeat, while
k
<
final
,
a. Let
Pk
be !
(
k
)).
b. Perform ?
(
O
,
Pk
,
value
,
true
).
c. Set
k
to
k
+ 1.
12. Return
O
.
NOTE 2
NOTE 1
The
start
and
end
arguments are optional with default values of 0 and the length of the
this
value.
If
start
is negative, it is treated as
length
+
start
where
length
is the length of the array. If
end
is
negative, it is treated as
length
+
end
.
The
fill
fill
function is intentionally generic; it does not require that its
this
value be an Array
object. Therefore it can be transferred to other kinds of objects for use as a method.
callbackfn
should be a function that accepts three arguments and returns a value that is coercible
to a Boolean value.
filter
filter
calls
callbackfn
once for each element in the array, in ascending
order, and constructs a new array of all the values for which
callbackfn
returns
true
.
callbackfn
is
called only for elements of the array which actually exist; it is not called for missing elements of
the array.
If a
thisArg
parameter is provided, it will be used as the
this
value for each invocation of
callbackfn
. If it is not provided,
undefined
is used instead.
callbackfn
is called with three arguments: the value of the element, the index of the element, and
the object being traversed.
filter
filter
does not directly mutate the object on which it is called but the object may be mutated
by the calls to
callbackfn
.
The range of elements processed by
filter
filter
is set before the first call to
callbackfn
. Elements
which are appended to the array after the call to
filter
filter
begins will not be visited by
callbackfn
.
If existing elements of the array are changed their value as passed to
callbackfn
will be the value at
the time
filter
filter
visits them; elements that are deleted after the call to
filter
filter
begins and
before being visited are not visited.
23.1.3.7 Array.prototype.filter (
callbackfn
[ ,
thisArg
] )
641
When the
filter
filter
method is called with one or two arguments, the following steps are taken:
1. Let
O
be ?
this
value).
2. Let
len
be ?
(
O
).
3. If
callbackfn
) is
false
, throw a
TypeError
exception.
4. Let
A
be ?
(
O
, 0).
5. Let
k
be 0.
6. Let
to
be 0.
7. Repeat, while
k
<
len
,
a. Let
Pk
be !
(
k
)).
b. Let
kPresent
(
O
,
Pk
).
c. If
kPresent
is
true
, then
i. Let
kValue
be ?
(
O
,
Pk
).
ii. Let
selected
(
callbackfn
,
thisArg
, «
kValue
(
k
),
O
»)).
iii. If
selected
is
true
, then
1. Perform ?
(
A
, !
(
to
)),
kValue
).
2. Set
to
to
to
+ 1.
d. Set
k
to
k
+ 1.
8. Return
A
.
NOTE 2
The
find
find
method is called with one or two arguments,
predicate
and
thisArg
.
NOTE 1
When the
find
find
method is called, the following steps are taken:
The
filter
filter
function is intentionally generic; it does not require that its
this
value be an Array
object. Therefore it can be transferred to other kinds of objects for use as a method.
predicate
should be a function that accepts three arguments and returns a value that is coercible to
a Boolean value.
find
find
calls
predicate
once for each element of the array, in ascending order, until
it finds one where
predicate
returns
true
. If such an element is found,
find
find
immediately returns
that element value. Otherwise,
find
find
returns
undefined
.
If a
thisArg
parameter is provided, it will be used as the
this
value for each invocation of
predicate
.
If it is not provided,
undefined
is used instead.
predicate
is called with three arguments: the value of the element, the index of the element, and
the object being traversed.
find
find
does not directly mutate the object on which it is called but the object may be mutated by
the calls to
predicate
.
The range of elements processed by
find
find
is set before the first call to
predicate
. Elements that are
appended to the array after the call to
find
find
begins will not be visited by
predicate
. If existing
elements of the array are changed, their value as passed to
predicate
will be the value at the time
that
find
find
visits them; elements that are deleted after the call to
find
find
begins and before being
visited are not visited.
23.1.3.8 Array.prototype.find (
predicate
[ ,
thisArg
] )
642
1. Let
O
be ?
this
value).
2. Let
len
be ?
(
O
).
3. If
predicate
) is
false
, throw a
TypeError
exception.
4. Let
k
be 0.
5. Repeat, while
k
<
len
,
a. Let
Pk
be !
(
k
)).
b. Let
kValue
be ?
(
O
,
Pk
).
c. Let
testResult
(
predicate
,
thisArg
, «
kValue
k
),
O
»)).
d. If
testResult
is
true
, return
kValue
.
e. Set
k
to
k
+ 1.
6. Return
undefined
.
NOTE 2
NOTE 1
When the
findIndex
findIndex
method is called with one or two arguments, the following steps are taken:
1. Let
O
be ?
this
value).
2. Let
len
be ?
(
O
).
3. If
predicate
) is
false
, throw a
TypeError
exception.
4. Let
k
be 0.
5. Repeat, while
k
<
len
,
a. Let
Pk
be !
(
k
)).
b. Let
kValue
be ?
(
O
,
Pk
).
c. Let
testResult
(
predicate
,
thisArg
, «
kValue
k
),
O
»)).
d. If
testResult
is
true
, return
(
k
).
The
find
find
function is intentionally generic; it does not require that its
this
value be an Array
object. Therefore it can be transferred to other kinds of objects for use as a method.
predicate
should be a function that accepts three arguments and returns a value that is coercible to
a Boolean value.
findIndex
findIndex
calls
predicate
once for each element of the array, in ascending
order, until it finds one where
predicate
returns
true
. If such an element is found,
findIndex
findIndex
immediately returns the index of that element value. Otherwise,
findIndex
findIndex
returns -1.
If a
thisArg
parameter is provided, it will be used as the
this
value for each invocation of
predicate
.
If it is not provided,
undefined
is used instead.
predicate
is called with three arguments: the value of the element, the index of the element, and
the object being traversed.
findIndex
findIndex
does not directly mutate the object on which it is called but the object may be
mutated by the calls to
predicate
.
The range of elements processed by
findIndex
findIndex
is set before the first call to
predicate
. Elements
that are appended to the array after the call to
findIndex
findIndex
begins will not be visited by
predicate
. If existing elements of the array are changed, their value as passed to
predicate
will be
the value at the time that
findIndex
findIndex
visits them; elements that are deleted after the call to
findIndex
findIndex
begins and before being visited are not visited.
23.1.3.9 Array.prototype.findIndex (
predicate
[ ,
thisArg
] )
643
e. Set
k
to
k
+ 1.
6. Return
-1
𝔽
.
NOTE 2
When the
flat
flat
method is called with zero or one arguments, the following steps are taken:
1. Let
O
be ?
this
value).
2. Let
sourceLen
O
).
3. Let
depthNum
be 1.
4. If
depth
is not
undefined
, then
a. Set
depthNum
depth
).
b. If
depthNum
< 0, set
depthNum
to 0.
5. Let
A
be ?
(
O
, 0).
6. Perform ?
(
A
,
O
,
sourceLen
, 0,
depthNum
).
7. Return
A
.
The abstract operation FlattenIntoArray takes arguments
target
,
source
,
sourceLen
(a non-negative
start
(a non-
negative
), and
depth
(a non-negative
or +
∞
) and optional arguments
mapperFunction
and
thisArg
. It
performs the following steps when called:
1.
:
target
) is Object.
2.
:
source
) is Object.
3.
: If
mapperFunction
is present, then !
(
mapperFunction
) is
true
,
thisArg
is present, and
depth
is 1.
4. Let
targetIndex
be
start
.
5. Let
sourceIndex
be
+0
𝔽
.
6. Repeat, while
(
sourceIndex
) <
sourceLen
,
a. Let
P
be !
(
sourceIndex
).
b. Let
exists
(
source
,
P
).
c. If
exists
is
true
, then
i. Let
element
source
,
P
).
ii. If
mapperFunction
is present, then
1. Set
element
(
mapperFunction
,
thisArg
, «
element
,
sourceIndex
,
source
»).
iii. Let
shouldFlatten
be
false
.
iv. If
depth
> 0, then
1. Set
shouldFlatten
to ?
(
element
).
v. If
shouldFlatten
is
true
, then
1. If
depth
is +
∞
, let
newDepth
be +
∞
.
2. Else, let
newDepth
be
depth
- 1.
3. Let
elementLen
be ?
(
element
).
4. Set
targetIndex
(
target
,
element
,
elementLen
,
targetIndex
,
newDepth
).
vi. Else,
1. If
targetIndex
≥
2
53
- 1, throw a
TypeError
exception.
The
findIndex
findIndex
function is intentionally generic; it does not require that its
this
value be an
Array object. Therefore it can be transferred to other kinds of objects for use as a method.
23.1.3.10 Array.prototype.flat ( [
depth
] )
23.1.3.10.1 FlattenIntoArray (
target
,
source
,
sourceLen
,
start
,
depth
[ ,
mapperFunction
,
thisArg
] )
644
2. Perform ?
(
target
(
targetIndex
)),
element
).
3. Set
targetIndex
to
targetIndex
+ 1.
d. Set
sourceIndex
to
sourceIndex
+
1
𝔽
.
7. Return
targetIndex
.
When the
flatMap
flatMap
method is called with one or two arguments, the following steps are taken:
1. Let
O
be ?
this
value).
2. Let
sourceLen
O
).
3. If !
mapperFunction
) is
false
, throw a
TypeError
exception.
4. Let
A
be ?
(
O
, 0).
5. Perform ?
(
A
,
O
,
sourceLen
, 0, 1,
mapperFunction
,
thisArg
).
6. Return
A
.
NOTE 1
When the
forEach
forEach
method is called with one or two arguments, the following steps are taken:
1. Let
O
be ?
this
value).
2. Let
len
be ?
(
O
).
3. If
callbackfn
) is
false
, throw a
TypeError
exception.
4. Let
k
be 0.
5. Repeat, while
k
<
len
,
a. Let
Pk
be !
(
k
)).
b. Let
kPresent
(
O
,
Pk
).
c. If
kPresent
is
true
, then
i. Let
kValue
be ?
(
O
,
Pk
).
ii. Perform ?
(
callbackfn
,
thisArg
, «
kValue
k
),
O
»).
callbackfn
should be a function that accepts three arguments.
forEach
forEach
calls
callbackfn
once for
each element present in the array, in ascending order.
callbackfn
is called only for elements of the
array which actually exist; it is not called for missing elements of the array.
If a
thisArg
parameter is provided, it will be used as the
this
value for each invocation of
callbackfn
. If it is not provided,
undefined
is used instead.
callbackfn
is called with three arguments: the value of the element, the index of the element, and
the object being traversed.
forEach
forEach
does not directly mutate the object on which it is called but the object may be mutated
by the calls to
callbackfn
.
The range of elements processed by
forEach
forEach
is set before the first call to
callbackfn
. Elements
which are appended to the array after the call to
forEach
forEach
begins will not be visited by
callbackfn
. If existing elements of the array are changed, their value as passed to
callbackfn
will be
the value at the time
forEach
forEach
visits them; elements that are deleted after the call to
forEach
forEach
begins and before being visited are not visited.
23.1.3.11 Array.prototype.flatMap (
mapperFunction
[ ,
thisArg
] )
23.1.3.12 Array.prototype.forEach (
callbackfn
[ ,
thisArg
] )
645
d. Set
k
to
k
+ 1.
6. Return
undefined
.
NOTE 2
NOTE 1
When the
includes
includes
method is called, the following steps are taken:
1. Let
O
be ?
this
value).
2. Let
len
be ?
(
O
).
3. If
len
is 0, return
false
.
4. Let
n
fromIndex
).
5.
: If
fromIndex
is
undefined
, then
n
is 0.
6. If
n
is +
∞
, return
false
.
7. Else if
n
is -
∞
, set
n
to 0.
8. If
n
≥
0, then
a. Let
k
be
n
.
9. Else,
a. Let
k
be
len
+
n
.
b. If
k
< 0, set
k
to 0.
10. Repeat, while
k
<
len
,
a. Let
elementK
be ?
(
O
(
k
))).
b. If
searchElement
,
elementK
) is
true
, return
true
.
c. Set
k
to
k
+ 1.
11. Return
false
.
NOTE 2
NOTE 3
The
forEach
forEach
function is intentionally generic; it does not require that its
this
value be an Array
object. Therefore it can be transferred to other kinds of objects for use as a method.
includes
includes
compares
searchElement
to the elements of the array, in ascending order, using the
algorithm, and if found at any position, returns
true
; otherwise,
false
is returned.
The optional second argument
fromIndex
defaults to
+0
𝔽
(i.e. the whole array is searched). If it is
greater than or equal to the length of the array,
false
is returned, i.e. the array will not be
searched. If it is less than
+0
𝔽
, it is used as the offset from the end of the array to compute
fromIndex
. If the computed index is less than
+0
𝔽
, the whole array will be searched.
The
includes
includes
function is intentionally generic; it does not require that its
this
value be an
Array object. Therefore it can be transferred to other kinds of objects for use as a method.
The
includes
includes
method intentionally differs from the similar
indexOf
indexOf
method in two ways.
First, it uses the
detect
NaN
array elements. Second, it does not skip missing array elements, instead treating
them as
undefined
.
23.1.3.13 Array.prototype.includes (
searchElement
[ ,
fromIndex
] )
23.1.3.14 Array.prototype.indexOf (
searchElement
[ ,
fromIndex
] )
646
NOTE 1
When the
indexOf
indexOf
method is called with one or two arguments, the following steps are taken:
1. Let
O
be ?
this
value).
2. Let
len
be ?
(
O
).
3. If
len
is 0, return
-1
𝔽
.
4. Let
n
fromIndex
).
5.
: If
fromIndex
is
undefined
, then
n
is 0.
6. If
n
is +
∞
, return
-1
𝔽
.
7. Else if
n
is -
∞
, set
n
to 0.
8. If
n
≥
0, then
a. Let
k
be
n
.
9. Else,
a. Let
k
be
len
+
n
.
b. If
k
< 0, set
k
to 0.
10. Repeat, while
k
<
len
,
a. Let
kPresent
(
O
(
k
))).
b. If
kPresent
is
true
, then
i. Let
elementK
be ?
(
O
(
k
))).
ii. Let
same
be the result of performing
searchElement
===
elementK
.
iii. If
same
is
true
, return
(
k
).
c. Set
k
to
k
+ 1.
11. Return
-1
𝔽
.
NOTE 2
NOTE 1
The
join
join
method takes one argument,
separator
, and performs the following steps:
1. Let
O
be ?
this
value).
2. Let
len
be ?
(
O
).
3. If
separator
is
undefined
, let
sep
be the single-element String
","
.
indexOf
indexOf
compares
searchElement
to the elements of the array, in ascending order, using the
algorithm, and if found at one or more indices, returns the smallest
such index; otherwise,
-1
𝔽
is returned.
The optional second argument
fromIndex
defaults to
+0
𝔽
(i.e. the whole array is searched). If it is
greater than or equal to the length of the array,
-1
𝔽
is returned, i.e. the array will not be searched.
If it is less than
+0
𝔽
, it is used as the offset from the end of the array to compute
fromIndex
. If the
computed index is less than
+0
𝔽
, the whole array will be searched.
The
indexOf
indexOf
function is intentionally generic; it does not require that its
this
value be an Array
object. Therefore it can be transferred to other kinds of objects for use as a method.
The elements of the array are converted to Strings, and these Strings are then concatenated,
separated by occurrences of the
separator
. If no separator is provided, a single comma is used as
the separator.
23.1.3.15 Array.prototype.join (
separator
)
647
4. Else, let
sep
be ?
(
separator
).
5. Let
R
be the empty String.
6. Let
k
be 0.
7. Repeat, while
k
<
len
,
a. If
k
> 0, set
R
to the
R
and
sep
.
b. Let
element
O
(
k
))).
c. If
element
is
undefined
or
null
, let
next
be the empty String; otherwise, let
next
be ?
element
).
d. Set
R
to the
of
R
and
next
.
e. Set
k
to
k
+ 1.
8. Return
R
.
NOTE 2
The following steps are taken:
1. Let
O
be ?
this
value).
2. Return
O
,
key
).
NOTE 1
When the
lastIndexOf
lastIndexOf
method is called with one or two arguments, the following steps are taken:
1. Let
O
be ?
this
value).
2. Let
len
be ?
(
O
).
3. If
len
is 0, return
-1
𝔽
.
4. If
fromIndex
is present, let
n
fromIndex
); else let
n
be
len
- 1.
5. If
n
is -
∞
, return
-1
𝔽
.
6. If
n
≥
0, then
a. Let
k
be
(
n
,
len
- 1).
7. Else,
a. Let
k
be
len
+
n
.
8. Repeat, while
k
≥
0,
a. Let
kPresent
(
O
(
k
))).
b. If
kPresent
is
true
, then
i. Let
elementK
be ?
(
O
(
k
))).
The
join
join
function is intentionally generic; it does not require that its
this
value be an Array
object. Therefore, it can be transferred to other kinds of objects for use as a method.
lastIndexOf
lastIndexOf
compares
searchElement
to the elements of the array in descending order using
the
algorithm, and if found at one or more indices, returns the largest
such index; otherwise,
-1
𝔽
is returned.
The optional second argument
fromIndex
defaults to the array's length minus one (i.e. the whole
array is searched). If it is greater than or equal to the length of the array, the whole array will be
searched. If it is less than
+0
𝔽
, it is used as the offset from the end of the array to compute
fromIndex
. If the computed index is less than
+0
𝔽
,
-1
𝔽
is returned.
23.1.3.16 Array.prototype.keys ( )
23.1.3.17 Array.prototype.lastIndexOf (
searchElement
[ ,
fromIndex
] )
648
ii. Let
same
be the result of performing
searchElement
===
elementK
.
iii. If
same
is
true
, return
(
k
).
c. Set
k
to
k
- 1.
9. Return
-1
𝔽
.
NOTE 2
NOTE 1
When the
map
map
method is called with one or two arguments, the following steps are taken:
1. Let
O
be ?
this
value).
2. Let
len
be ?
(
O
).
3. If
callbackfn
) is
false
, throw a
TypeError
exception.
4. Let
A
be ?
(
O
,
len
).
5. Let
k
be 0.
6. Repeat, while
k
<
len
,
a. Let
Pk
be !
(
k
)).
b. Let
kPresent
(
O
,
Pk
).
c. If
kPresent
is
true
, then
i. Let
kValue
be ?
(
O
,
Pk
).
ii. Let
mappedValue
(
callbackfn
,
thisArg
, «
kValue
k
),
O
»).
iii. Perform ?
(
A
,
Pk
,
mappedValue
).
d. Set
k
to
k
+ 1.
7. Return
A
.
The
lastIndexOf
lastIndexOf
function is intentionally generic; it does not require that its
this
value be an
Array object. Therefore it can be transferred to other kinds of objects for use as a method.
callbackfn
should be a function that accepts three arguments.
map
map
calls
callbackfn
once for each
element in the array, in ascending order, and constructs a new Array from the results.
callbackfn
is
called only for elements of the array which actually exist; it is not called for missing elements of
the array.
If a
thisArg
parameter is provided, it will be used as the
this
value for each invocation of
callbackfn
. If it is not provided,
undefined
is used instead.
callbackfn
is called with three arguments: the value of the element, the index of the element, and
the object being traversed.
map
map
does not directly mutate the object on which it is called but the object may be mutated by
the calls to
callbackfn
.
The range of elements processed by
map
map
is set before the first call to
callbackfn
. Elements which
are appended to the array after the call to
map
map
begins will not be visited by
callbackfn
. If existing
elements of the array are changed, their value as passed to
callbackfn
will be the value at the time
map
map
visits them; elements that are deleted after the call to
map
map
begins and before being visited
are not visited.
23.1.3.18 Array.prototype.map (
callbackfn
[ ,
thisArg
] )
649
NOTE 2
NOTE 1
When the
pop
pop
method is called, the following steps are taken:
1. Let
O
be ?
this
value).
2. Let
len
be ?
(
O
).
3. If
len
= 0, then
a. Perform ?
(
O
,
"length"
,
+0
𝔽
,
true
).
b. Return
undefined
.
4. Else,
a.
:
len
> 0.
b. Let
newLen
len
- 1).
c. Let
index
be !
(
newLen
).
d. Let
element
O
,
index
).
e. Perform ?
O
,
index
).
f. Perform ?
(
O
,
"length"
,
newLen
,
true
).
g. Return
element
.
NOTE 2
NOTE 1
When the
push
push
method is called with zero or more arguments, the following steps are taken:
1. Let
O
be ?
this
value).
2. Let
len
be ?
(
O
).
3. Let
argCount
be the number of elements in
items
.
4. If
len
+
argCount
> 2
53
- 1, throw a
TypeError
exception.
5. For each element
E
of
items
, do
a. Perform ?
(
O
, !
(
len
)),
E
,
true
).
b. Set
len
to
len
+ 1.
6. Perform ?
(
O
,
"length"
,
len
),
true
).
7. Return
len
).
The
"length"
property of the
push
push
method is
1
𝔽
.
The
map
map
function is intentionally generic; it does not require that its
this
value be an Array
object. Therefore it can be transferred to other kinds of objects for use as a method.
The last element of the array is removed from the array and returned.
The
pop
pop
function is intentionally generic; it does not require that its
this
value be an Array
object. Therefore it can be transferred to other kinds of objects for use as a method.
The arguments are appended to the end of the array, in the order in which they appear. The new
length of the array is returned as the result of the call.
23.1.3.19 Array.prototype.pop ( )
23.1.3.20 Array.prototype.push ( ...
items
)
650
NOTE 2
NOTE 1
When the
reduce
reduce
method is called with one or two arguments, the following steps are taken:
1. Let
O
be ?
this
value).
2. Let
len
be ?
(
O
).
3. If
callbackfn
) is
false
, throw a
TypeError
exception.
4. If
len
= 0 and
initialValue
is not present, throw a
TypeError
exception.
5. Let
k
be 0.
6. Let
accumulator
be
undefined
.
7. If
initialValue
is present, then
a. Set
accumulator
to
initialValue
.
8. Else,
a. Let
kPresent
be
false
.
b. Repeat, while
kPresent
is
false
and
k
<
len
,
i. Let
Pk
be !
(
k
)).
ii. Set
kPresent
(
O
,
Pk
).
iii. If
kPresent
is
true
, then
1. Set
accumulator
O
,
Pk
).
iv. Set
k
to
k
+ 1.
c. If
kPresent
is
false
, throw a
TypeError
exception.
9. Repeat, while
k
<
len
,
a. Let
Pk
be !
(
k
)).
The
push
push
function is intentionally generic; it does not require that its
this
value be an Array
object. Therefore it can be transferred to other kinds of objects for use as a method.
callbackfn
should be a function that takes four arguments.
reduce
reduce
calls the callback, as a
function, once for each element after the first element present in the array, in ascending order.
callbackfn
is called with four arguments: the
previousValue
(value from the previous call to
callbackfn
), the
currentValue
(value of the current element), the
currentIndex
, and the object being
traversed. The first time that callback is called, the
previousValue
and
currentValue
can be one of
two values. If an
initialValue
was supplied in the call to
reduce
reduce
, then
previousValue
will be equal
to
initialValue
and
currentValue
will be equal to the first value in the array. If no
initialValue
was
supplied, then
previousValue
will be equal to the first value in the array and
currentValue
will be
equal to the second. It is a
TypeError
if the array contains no elements and
initialValue
is not
provided.
reduce
reduce
does not directly mutate the object on which it is called but the object may be mutated
by the calls to
callbackfn
.
The range of elements processed by
reduce
reduce
is set before the first call to
callbackfn
. Elements that
are appended to the array after the call to
reduce
reduce
begins will not be visited by
callbackfn
. If
existing elements of the array are changed, their value as passed to
callbackfn
will be the value at
the time
reduce
reduce
visits them; elements that are deleted after the call to
reduce
reduce
begins and
before being visited are not visited.
23.1.3.21 Array.prototype.reduce (
callbackfn
[ ,
initialValue
] )
651
b. Let
kPresent
(
O
,
Pk
).
c. If
kPresent
is
true
, then
i. Let
kValue
be ?
(
O
,
Pk
).
ii. Set
accumulator
(
callbackfn
,
undefined
, «
accumulator
,
kValue
k
),
O
»).
d. Set
k
to
k
+ 1.
10. Return
accumulator
.
NOTE 2
NOTE 1
When the
reduceRight
reduceRight
method is called with one or two arguments, the following steps are taken:
1. Let
O
be ?
this
value).
2. Let
len
be ?
(
O
).
3. If
callbackfn
) is
false
, throw a
TypeError
exception.
4. If
len
is 0 and
initialValue
is not present, throw a
TypeError
exception.
5. Let
k
be
len
- 1.
6. Let
accumulator
be
undefined
.
7. If
initialValue
is present, then
a. Set
accumulator
to
initialValue
.
8. Else,
a. Let
kPresent
be
false
.
b. Repeat, while
kPresent
is
false
and
k
≥
0,
i. Let
Pk
be !
(
k
)).
The
reduce
reduce
function is intentionally generic; it does not require that its
this
value be an Array
object. Therefore it can be transferred to other kinds of objects for use as a method.
callbackfn
should be a function that takes four arguments.
reduceRight
reduceRight
calls the callback, as a
function, once for each element after the first element present in the array, in descending order.
callbackfn
is called with four arguments: the
previousValue
(value from the previous call to
callbackfn
), the
currentValue
(value of the current element), the
currentIndex
, and the object being
traversed. The first time the function is called, the
previousValue
and
currentValue
can be one of
two values. If an
initialValue
was supplied in the call to
reduceRight
reduceRight
, then
previousValue
will
be equal to
initialValue
and
currentValue
will be equal to the last value in the array. If no
initialValue
was supplied, then
previousValue
will be equal to the last value in the array and
currentValue
will be equal to the second-to-last value. It is a
TypeError
if the array contains no
elements and
initialValue
is not provided.
reduceRight
reduceRight
does not directly mutate the object on which it is called but the object may be
mutated by the calls to
callbackfn
.
The range of elements processed by
reduceRight
reduceRight
is set before the first call to
callbackfn
.
Elements that are appended to the array after the call to
reduceRight
reduceRight
begins will not be
visited by
callbackfn
. If existing elements of the array are changed by
callbackfn
, their value as
passed to
callbackfn
will be the value at the time
reduceRight
reduceRight
visits them; elements that are
deleted after the call to
reduceRight
reduceRight
begins and before being visited are not visited.
23.1.3.22 Array.prototype.reduceRight (
callbackfn
[ ,
initialValue
] )
652

Нет комментариевНе стесняйтесь поделиться с нами вашим ценным мнением.
Текст