Blame view

node_modules/es-abstract/es2017.js 1.56 KB
2a09d1a4   liuqimichale   添加宜春 天水 宣化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
  'use strict';
  
  var bind = require('function-bind');
  
  var ES2016 = require('./es2016');
  var assign = require('./helpers/assign');
  var forEach = require('./helpers/forEach');
  
  var GetIntrinsic = require('./GetIntrinsic');
  
  var $TypeError = GetIntrinsic('%TypeError%');
  var $isEnumerable = bind.call(Function.call, GetIntrinsic('%ObjectPrototype%').propertyIsEnumerable);
  var $pushApply = bind.call(Function.apply, GetIntrinsic('%ArrayPrototype%').push);
  
  var ES2017 = assign(assign({}, ES2016), {
  	ToIndex: function ToIndex(value) {
  		if (typeof value === 'undefined') {
  			return 0;
  		}
  		var integerIndex = this.ToInteger(value);
  		if (integerIndex < 0) {
  			throw new RangeError('index must be >= 0');
  		}
  		var index = this.ToLength(integerIndex);
  		if (!this.SameValueZero(integerIndex, index)) {
  			throw new RangeError('index must be >= 0 and < 2 ** 53 - 1');
  		}
  		return index;
  	},
  
  	// https://www.ecma-international.org/ecma-262/8.0/#sec-enumerableownproperties
  	EnumerableOwnProperties: function EnumerableOwnProperties(O, kind) {
  		var keys = ES2016.EnumerableOwnNames(O);
  		if (kind === 'key') {
  			return keys;
  		}
  		if (kind === 'value' || kind === 'key+value') {
  			var results = [];
  			forEach(keys, function (key) {
  				if ($isEnumerable(O, key)) {
  					$pushApply(results, [
  						kind === 'value' ? O[key] : [key, O[key]]
  					]);
  				}
  			});
  			return results;
  		}
  		throw new $TypeError('Assertion failed: "kind" is not "key", "value", or "key+value": ' + kind);
  	}
  });
  
  delete ES2017.EnumerableOwnNames; // replaced with EnumerableOwnProperties
  
  module.exports = ES2017;