String.prototype.slice(beginIndex, endIndex)
slice 方法是用来从父字符串中截取子字符串并返回一个新的字符串,接受两个参数。
beginIndex | endIndex |
接收一个整数作为第一个参数,会进行Number强制转换,如果得到 NaN,或者默认不传递第一个参数,都会以 0 作为默认值。如果超出字符串的长度,截取出来是一个空字符串。 | 接收一个整数作为第一个参数,会进行Number强制转换,如果得到 NaN,会以 0 作为默认值。如果不传入就会以 str.length 为截取最终位置。 |
可以接收一个负数,如果是负数,开始截取的位置就是 str.length + beginIndex。就是会保留下 beginIndex 个字符串,从 str.length - beginIndex 开始截取。 | 可以接收一个负数,如果是负数,结束截取的位置就是 str.length + endIndex。 |
实现:
String.prototype.slice1 = function(beginIndex, endIndex) {
let len = this.length, str = '';
endIndex = (typeof endIndex != 'undefined') ? endIndex : len;
let start = beginIndex || 0;
start = (start >= 0) ? start : Math.max(0, len + start);
let end = (typeof endIndex == 'number') ? Math.min(endIndex, len) : len;
if (endIndex < 0) {
end = len + end;
}
while(start < end) {
str += this[start];
start++;
}
return str;
}
String.prototype.substr(beginIndex, endIndex)
substr 返回一个字符串中从指定位置开始到指定字符串位置,截取初一个新的字符串。接受两个参数。
beginIndex | length |
接收一个整数作为第一个参数,会进行Number强制转换,如果得到 NaN,或者默认不传递第一个参数,都会以 0 作为默认值。如果超出字符串的长度,截取出来是一个空字符串。 | 需要截取的长度。接收一个整数作为第一个参数,会进行Number强制转换,如果得到 NaN,都会以 最一个字符 0 作为默认值。 |
可以接收一个负数,如果是负数,开始截取的位置就是 str.length + beginIndex。就是会保留下 beginIndex 个字符串,从 str.length - beginIndex 开始截取。 |
实现:
String.prototype.substr1 = function(start, length) {
let len = this.length, str = '';
length = (typeof length != 'undefined') ? length : len;
let begin = start || 0;
begin = (begin >= 0) ? begin : Math.max(0, start + len);
while (length > 0) {
if (!this[begin]) break;
str += this[begin++];
length--;
}
return str;
}
String.prototype.substring(start, end)
substring 方法返回一个字符串在开始索引到结束索引之间的一个子集,或从开始索引直到字符串的末尾的一个子集。
start | end |
接收一个整数作为第一个参数,会进行Number强制转换,如果得到 NaN,或者默认不传递第一个参数,还有负数,都会以 0 作为默认值。如果超出字符串的长度,截取出来是一个空字符串。 | 接收一个整数作为第一个参数,会进行Number强制转换,如果得到 NaN,会以 0 作为默认值。如果不传入就会以 str.length 为截取最终位置。 |
String.prototype.substring1 = function(start, end) {
let len = this.length, str = '';
end = (typeof end == 'undefined') ? len - 1 : end;
end = (typeof end == 'number') ? Math.min(end, len) : len;
let beign = start || 0;
begin = +beign;
if (isNaN(beign) || beign < 0) beign = 0;
let result = 0;
if (end < begin) {
result = end;
end = begin;
beign = result;
}
let size = end - begin; // 实际要截取的长度。
if (size > 0) {
if (this.charAt) {
for (let i = 0; i < size; i++) {
result += this.charAt(begin + i);
}
} else {
for (let i = 0; i < size; i++) {
result += this[begin + i];
}
}
}
return str;
}