string-polyfill.js 1.05 KB
String.prototype.substr = function (start, length) {
  if (start === undefined) {
    return this.toString()
  }
  if (typeof start !== 'number' || (typeof length !== 'number' && length !== undefined)) {
    return ''
  }
  const strArr = [...this]
  const _length = strArr.length
  if (_length + start < 0) {
    start = 0
  }
  if (length === undefined || (start < 0 && start + length > 0)) {
    return strArr.slice(start).join('')
  } else {
    return strArr.slice(start, start + length).join('')
  }
}


String.prototype.substring = function (start, end) {
  if (start === undefined) {
    return this.toString()
  }
  if (typeof start !== 'number' || (typeof end !== 'number' && end !== undefined)) {
    return ''
  }
  if (!(start > 0)) {
    start = 0
  }
  if (!(end > 0) && end !== undefined) {
    end = 0
  }
  const strArr = [...this]
  const _length = strArr.length
  if (start > _length) {
    start = _length
  }
  if (end > _length) {
    end = _length
  }
  if (end < start) {
    [start, end] = [end, start]
  }
  return strArr.slice(start, end).join('')
}