1 | 'use strict';
|
2 | var $ = require('../internals/export');
|
3 | var uncurryThis = require('../internals/function-uncurry-this');
|
4 | var requireObjectCoercible = require('../internals/require-object-coercible');
|
5 | var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');
|
6 | var toString = require('../internals/to-string');
|
7 | var fails = require('../internals/fails');
|
8 |
|
9 | var charAt = uncurryThis(''.charAt);
|
10 |
|
11 | var FORCED = fails(function () {
|
12 |
|
13 | return '𠮷'.at(-2) !== '\uD842';
|
14 | });
|
15 |
|
16 |
|
17 |
|
18 | $({ target: 'String', proto: true, forced: FORCED }, {
|
19 | at: function at(index) {
|
20 | var S = toString(requireObjectCoercible(this));
|
21 | var len = S.length;
|
22 | var relativeIndex = toIntegerOrInfinity(index);
|
23 | var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;
|
24 | return (k < 0 || k >= len) ? undefined : charAt(S, k);
|
25 | }
|
26 | });
|