Spec-Zone.ru › JavaScript

TypedArray[Symbol.species]

Базовый уровень Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

Статическое свойство-аксессор TypedArray[Symbol.species] возвращает конструктор, используемый для создания возвращаемых значений из методов типизированных массивов.

Предупреждение: Существование [Symbol.species] позволяет выполнять произвольный код и может создавать уязвимости безопасности. Это также значительно усложняет некоторые оптимизации. Разработчики движков исследуют возможность удаления этой функции. По возможности избегайте зависимости от нее.

Синтаксис

TypedArray[Symbol.species]

Возвращаемое значение

Значение конструктора (this), на котором был вызван get [Symbol.species]. Возвращаемое значение используется для создания возвращаемых значений из методов типизированных массивов, которые создают новые типизированные массивы.

Описание

Свойство-аксессор [Symbol.species] возвращает конструктор по умолчанию для объектов типизированного массива. Конструкторы подклассов могут переопределить его, чтобы изменить назначение конструктора. Реализация по умолчанию выглядит следующим образом:

// Hypothetical underlying implementation for illustration
class TypedArray {
  static get [Symbol.species]() {
    return this;
  }
}

Благодаря этой полиморфной реализации, [Symbol.species] производных подклассов также по умолчанию возвращает сам конструктор.

class SubTypedArray extends Int8Array {}
SubTypedArray[Symbol.species] === SubTypedArray; // true

При вызове методов типизированного массива, которые не изменяют существующий массив, но возвращают новый экземпляр массива (например, filter() и map()), будет доступен constructor[Symbol.species] массива. Возвращенный конструктор будет использоваться для создания возвращаемого значения метода типизированного массива.

Однако, в отличие от Array[Symbol.species], при использовании [Symbol.species] для создания новых типизированных массивов, язык гарантирует, что вновь созданный массив является надлежащим типизированным массивом и имеет тот же тип содержимого, что и исходный массив — например, нельзя создать BigInt64Array из Float64Array или создать массив, не являющийся BigInt, из массива BigInt. При попытке сделать это выбрасывается TypeError.

class BadArray extends Int8Array {
  static get [Symbol.species]() {
    return Array;
  }
}
new BadArray(1).map(() => 0); // TypeError: Method %TypedArray%.prototype.map called on incompatible receiver [object Array]

class BadArray2 extends Int8Array {
  static get [Symbol.species]() {
    return BigInt64Array;
  }
}
new BadArray2(1).map(() => 0n); // TypeError: TypedArray.prototype.map constructed typed array of different content type from |this|

Примечание: Из-за ошибки как в SpiderMonkey, так и в V8, совпадение типов содержимого не проверяется. Только Safari выбросит TypeError во втором примере.

Примеры

Species в обычных объектах

Свойство [Symbol.species] возвращает функцию конструктора по умолчанию, которая сама является одним из конструкторов типизированных массивов для любого заданного конструктора типизированного массива.

Int8Array[Symbol.species]; // function Int8Array()
Uint8Array[Symbol.species]; // function Uint8Array()
Float32Array[Symbol.species]; // function Float32Array()

Species в производных объектах

В экземпляре пользовательского подкласса TypedArray, такого как MyTypedArray, species MyTypedArray является конструктором MyTypedArray. Однако вы можете захотеть переопределить это, чтобы возвращать родительский объект типизированного массива в методах вашего производного класса:

class MyTypedArray extends Uint8Array {
  // Overwrite MyTypedArray species to the parent Uint8Array constructor
  static get [Symbol.species]() {
    return Uint8Array;
  }
}

Спецификации

Спецификация
Спецификация языка ECMAScript® 2027
# sec-get-%typedarray%-%symbol.species%

Совместимость с браузерами

Десктопные Мобильные Серверные
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
@@species
51
13
48
38
10
51
48
41
10
5.0
51
10
1.0.0
1.0
6.5.0

См. также

  • TypedArray
  • Symbol.species

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/Symbol.species

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API