You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							60 lines
						
					
					
						
							2.3 KiB
						
					
					
				
			
		
		
	
	
							60 lines
						
					
					
						
							2.3 KiB
						
					
					
				'use strict'; | 
						|
var $ = require('../internals/export'); | 
						|
var fails = require('../internals/fails'); | 
						|
var isArray = require('../internals/is-array'); | 
						|
var isObject = require('../internals/is-object'); | 
						|
var toObject = require('../internals/to-object'); | 
						|
var toLength = require('../internals/to-length'); | 
						|
var createProperty = require('../internals/create-property'); | 
						|
var arraySpeciesCreate = require('../internals/array-species-create'); | 
						|
var arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support'); | 
						|
var wellKnownSymbol = require('../internals/well-known-symbol'); | 
						|
var V8_VERSION = require('../internals/engine-v8-version'); | 
						|
 | 
						|
var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable'); | 
						|
var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; | 
						|
var MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded'; | 
						|
 | 
						|
// We can't use this feature detection in V8 since it causes | 
						|
// deoptimization and serious performance degradation | 
						|
// https://github.com/zloirock/core-js/issues/679 | 
						|
var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () { | 
						|
  var array = []; | 
						|
  array[IS_CONCAT_SPREADABLE] = false; | 
						|
  return array.concat()[0] !== array; | 
						|
}); | 
						|
 | 
						|
var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat'); | 
						|
 | 
						|
var isConcatSpreadable = function (O) { | 
						|
  if (!isObject(O)) return false; | 
						|
  var spreadable = O[IS_CONCAT_SPREADABLE]; | 
						|
  return spreadable !== undefined ? !!spreadable : isArray(O); | 
						|
}; | 
						|
 | 
						|
var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT; | 
						|
 | 
						|
// `Array.prototype.concat` method | 
						|
// https://tc39.github.io/ecma262/#sec-array.prototype.concat | 
						|
// with adding support of @@isConcatSpreadable and @@species | 
						|
$({ target: 'Array', proto: true, forced: FORCED }, { | 
						|
  concat: function concat(arg) { // eslint-disable-line no-unused-vars | 
						|
    var O = toObject(this); | 
						|
    var A = arraySpeciesCreate(O, 0); | 
						|
    var n = 0; | 
						|
    var i, k, length, len, E; | 
						|
    for (i = -1, length = arguments.length; i < length; i++) { | 
						|
      E = i === -1 ? O : arguments[i]; | 
						|
      if (isConcatSpreadable(E)) { | 
						|
        len = toLength(E.length); | 
						|
        if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED); | 
						|
        for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]); | 
						|
      } else { | 
						|
        if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED); | 
						|
        createProperty(A, n++, E); | 
						|
      } | 
						|
    } | 
						|
    A.length = n; | 
						|
    return A; | 
						|
  } | 
						|
});
 | 
						|
 |