code: function StringSplitJS(separator, limit) {
    CHECK_OBJECT_COERCIBLE(this, "String.prototype.split");
  
    if (!IS_NULL_OR_UNDEFINED(separator)) {
      var splitter = separator[splitSymbol];
      if (!IS_UNDEFINED(splitter)) {
        return %_Call(splitter, separator, this, limit);
      }
    }
  
    var subject = TO_STRING(this);
    limit = (IS_UNDEFINED(limit)) ? kMaxUint32 : TO_UINT32(limit);
  
    var length = subject.length;
    var separator_string = TO_STRING(separator);
  
    if (limit === 0) return [];
  
    // ECMA-262 says that if separator is undefined, the result should
    // be an array of size 1 containing the entire string.
    if (IS_UNDEFINED(separator)) return [subject];
  
    var separator_length = separator_string.length;
  
    // If the separator string is empty then return the elements in the subject.
    if (separator_length === 0) return %StringToArray(subject, limit);
  
    return %StringSplit(subject, separator_string, limit);
  }
docs: ES6 21.1.3.17.