12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- 'use strict';
- var GetIntrinsic = require('get-intrinsic');
- var $Array = GetIntrinsic('%Array%');
- var $species = GetIntrinsic('%Symbol.species%', true);
- var $TypeError = GetIntrinsic('%TypeError%');
- var Get = require('./Get');
- var IsArray = require('./IsArray');
- var IsConstructor = require('./IsConstructor');
- var IsInteger = require('./IsInteger');
- var Type = require('./Type');
- module.exports = function ArraySpeciesCreate(originalArray, length) {
- if (!IsInteger(length) || length < 0) {
- throw new $TypeError('Assertion failed: length must be an integer >= 0');
- }
- var len = length === 0 ? 0 : length;
- var C;
- var isArray = IsArray(originalArray);
- if (isArray) {
- C = Get(originalArray, 'constructor');
-
-
-
-
-
- if ($species && Type(C) === 'Object') {
- C = Get(C, $species);
- if (C === null) {
- C = void 0;
- }
- }
- }
- if (typeof C === 'undefined') {
- return $Array(len);
- }
- if (!IsConstructor(C)) {
- throw new $TypeError('C must be a constructor');
- }
- return new C(len);
- };
|