Spaces:
Runtime error
Runtime error
| // Based on: https://github.com/mathiasbynens/String.prototype.at | |
| // Thanks @mathiasbynens ! | |
| ; | |
| var toInteger = require("../../number/to-integer") | |
| , validValue = require("../../object/valid-value"); | |
| module.exports = function (pos) { | |
| var str = String(validValue(this)), size = str.length, cuFirst, cuSecond, nextPos, len; | |
| pos = toInteger(pos); | |
| // Account for out-of-bounds indices | |
| // The odd lower bound is because the ToInteger operation is | |
| // going to round `n` to `0` for `-1 < n <= 0`. | |
| if (pos <= -1 || pos >= size) return ""; | |
| // Second half of `ToInteger` | |
| // eslint-disable-next-line no-bitwise | |
| pos |= 0; | |
| // Get the first code unit and code unit value | |
| cuFirst = str.charCodeAt(pos); | |
| nextPos = pos + 1; | |
| len = 1; | |
| if ( | |
| // Check if it’s the start of a surrogate pair | |
| cuFirst >= 0xd800 && | |
| cuFirst <= 0xdbff && // High surrogate | |
| size > nextPos // There is a next code unit | |
| ) { | |
| cuSecond = str.charCodeAt(nextPos); | |
| if (cuSecond >= 0xdc00 && cuSecond <= 0xdfff) len = 2; // Low surrogate | |
| } | |
| return str.slice(pos, pos + len); | |
| }; | |