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); | |
}; | |