PR #6

This document is a preview of merging PR #6 as commit 64a5844fd24e4580fc77643a04e9db67fd74fde2.

Do not reference it as authoritative in any way. Instead, see the living specification at https://github.com/tc39/proposal-typedarray-concat.

Stage 1 Draft / February 4, 2026

TypedArray.concat

1 TypedArray Objects

1.1 The %TypedArray% Intrinsic Object

1.1.1 Properties of the %TypedArray% Intrinsic Object

1.1.1.1 %TypedArray%.concat ( items [ , length ] )

This method concatenates the elements of multiple TypedArrays of the same type into a new TypedArray. It performs the following steps when called:

  1. Let C be the this value.
  2. If IsConstructor(C) is false, throw a TypeError exception.
  3. If C does not have a [[TypedArrayName]] internal slot, throw a TypeError exception.
  4. Let arrayList be ? IteratorToList(? GetIteratorFromMethod(items, ? GetMethod(items, %Symbol.iterator%))).
  5. Let totalLength be 0.
  6. Let elementType be TypedArrayElementType(C).
  7. For each element item of arrayList, do
    1. Let taRecord be ? ValidateTypedArray(item, seq-cst).
    2. If TypedArrayElementType(item) is not elementType, throw a TypeError exception.
    3. Let itemLength be TypedArrayLength(taRecord).
    4. Set totalLength to totalLength + itemLength.
  8. If length is present and length is not undefined, then
    1. Let newLength be ? ToIndex(length).
    2. If newLength > totalLength, throw a RangeError exception.
  9. Else,
    1. Let newLength be totalLength.
  10. Let A be a TypedArray that is an instance of C with a length of newLength, containing the concatenated elements from arrayList in order, truncated to newLength elements.
  11. Return A.
Note

This method requires that the this value be a TypedArray constructor and that all elements of items be TypedArrays of the same type. For example, Uint8Array.concat([a, b]) requires that both a and b are Uint8Array instances.

If the optional length parameter is provided and is less than the sum of the lengths of all input TypedArrays, the result is truncated to the specified length. If length is greater than the total length of input arrays, a RangeError is thrown.

Implementations may use any technique to allocate and populate the result TypedArray, such as direct memory copy, deferred concatenation, or element-by-element copying, provided the observable result is a TypedArray containing the concatenated elements in order.

Copyright & Software License

Software License

All Software contained in this document ("Software") is protected by copyright and is being made available under the "BSD License", included below. This Software may be subject to third party rights (rights from parties other than Ecma International), including patent rights, and no licenses under such third party rights are granted under this license even if the third party concerned is a member of Ecma International. SEE THE ECMA CODE OF CONDUCT IN PATENT MATTERS AVAILABLE AT https://ecma-international.org/memento/codeofconduct.htm FOR INFORMATION REGARDING THE LICENSING OF PATENT CLAIMS THAT ARE REQUIRED TO IMPLEMENT ECMA INTERNATIONAL STANDARDS.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  3. Neither the name of the authors nor Ecma International may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE ECMA INTERNATIONAL "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ECMA INTERNATIONAL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.