1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- 'use strict';
-
- var hasSymbols = require('has-symbols')();
-
- var ES2015 = require('./es2015');
- var assign = require('./helpers/assign');
-
- var callBound = require('./helpers/callBound');
-
- var $arrayPush = callBound('Array.prototype.push');
- var $arraySlice = callBound('Array.prototype.slice');
- var $arrayJoin = callBound('Array.prototype.join');
-
- var ES2016 = assign(assign({}, ES2015), {
- // https://www.ecma-international.org/ecma-262/7.0/#sec-samevaluenonnumber
- SameValueNonNumber: function SameValueNonNumber(x, y) {
- if (typeof x === 'number' || typeof x !== typeof y) {
- throw new TypeError('SameValueNonNumber requires two non-number values of the same type.');
- }
- return this.SameValue(x, y);
- },
-
- // https://www.ecma-international.org/ecma-262/7.0/#sec-iterabletoarraylike
- IterableToArrayLike: function IterableToArrayLike(items) {
- var usingIterator;
- if (hasSymbols) {
- usingIterator = this.GetMethod(items, Symbol.iterator);
- } else if (this.IsArray(items)) {
- usingIterator = function () {
- var i = -1;
- var arr = this; // eslint-disable-line no-invalid-this
- return {
- next: function () {
- i += 1;
- return {
- done: i >= arr.length,
- value: arr[i]
- };
- }
- };
- };
- } else if (this.Type(items) === 'String') {
- var ES = this;
- usingIterator = function () {
- var i = 0;
- return {
- next: function () {
- var nextIndex = ES.AdvanceStringIndex(items, i, true);
- var value = $arrayJoin($arraySlice(items, i, nextIndex), '');
- i = nextIndex;
- return {
- done: nextIndex > items.length,
- value: value
- };
- }
- };
- };
- }
- if (typeof usingIterator !== 'undefined') {
- var iterator = this.GetIterator(items, usingIterator);
- var values = [];
- var next = true;
- while (next) {
- next = this.IteratorStep(iterator);
- if (next) {
- var nextValue = this.IteratorValue(next);
- $arrayPush(values, nextValue);
- }
- }
- return values;
- }
-
- return this.ToObject(items);
- }
- });
-
- module.exports = ES2016;
|