/
eb
/
Surf
Обзор
Документация
Войти
/
eb
/
Surf
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
node_modules/es5-ext/string/#/at.js
35 строк
1 KB
EvgeniyBudaev
Initial commit
17 фев 2020, 09:02
17 фев 2020, 09:02
bb6f06f
Код
Авторство
О чём код?
// Based on: https://github.com/mathiasbynens/String.prototype.at // Thanks @mathiasbynens ! "use strict"; 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); };