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.
|
|
'use strict';
var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bind/callBound');
var $TypeError = GetIntrinsic('%TypeError%');
var $charAt = callBound('String.prototype.charAt');
var isString = require('is-string'); var isNegativeZero = require('is-negative-zero'); var unbox = require('unbox-primitive');
var CanonicalNumericIndexString = require('./CanonicalNumericIndexString'); var IsInteger = require('./IsInteger'); var IsPropertyKey = require('./IsPropertyKey'); var Type = require('./Type');
// https://262.ecma-international.org/6.0/#sec-stringgetindexproperty
module.exports = function StringGetIndexProperty(S, P) { if (typeof S === 'string' || !isString(S)) { throw new $TypeError('Assertion failed: `S` must be a boxed String Object'); } if (!IsPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); }
if (Type(P) !== 'String') { return void undefined; }
var index = CanonicalNumericIndexString(P); if (typeof index === 'undefined' || !IsInteger(index) || isNegativeZero(index)) { return void undefined; }
var str = unbox(S); var len = str.length; if (index < 0 || len <= index) { return void undefined; }
var resultStr = $charAt(str, index);
return { '[[Configurable]]': false, '[[Enumerable]]': true, '[[Value]]': resultStr, '[[Writable]]': false }; };
|