code: function StringSlice(start, end) {
    CHECK_OBJECT_COERCIBLE(this, "String.prototype.slice");
  
    var s = TO_STRING(this);
    var s_len = s.length;
    var start_i = TO_INTEGER(start);
    var end_i = s_len;
    if (!IS_UNDEFINED(end)) {
      end_i = TO_INTEGER(end);
    }
  
    if (start_i < 0) {
      start_i += s_len;
      if (start_i < 0) {
        start_i = 0;
      }
    } else {
      if (start_i > s_len) {
        return '';
      }
    }
  
    if (end_i < 0) {
      end_i += s_len;
      if (end_i < 0) {
        return '';
      }
    } else {
      if (end_i > s_len) {
        end_i = s_len;
      }
    }
  
    if (end_i <= start_i) {
      return '';
    }
  
    return %_SubString(s, start_i, end_i);
  }
docs: ECMA-262 section 15.5.4.13