原生JavaScript实现substr和substring方法

之前我们已经手写过了slice方法,今天我们再将String的两个方法substr和substring学习一下,其实思路异曲同工,主要还是对参数的理解和边界条件的考虑

// substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。
// 如果省略了参数length,则自动截取到字符串的尾部
String.prototype.my_substr = function(start = 0, length = this.length) {
    start = start < 0 ? this.length + start : start;
    if (length < 0) { return ""; }
    length = start + length > this.length ? this.length : start + length;
    let str = "";
    for (let i = start; i < length; i++) {
        str += this[i];
    }
    return str
}

// console.log('123456'.my_substr(-2, 29))

// substring() 方法用于提取字符串中介于两个指定下标之间的字符。
// substring() 方法返回的子串包括 start 处的字符,但不包括 stop 处的字符。

// 如果参数 start 与 stop 相等,那么该方法返回的就是一个空串(即长度为 0 的字符串)。
// 如果 start 比 stop 大,那么该方法在提取子串之前会先交换这两个参数。
// 与 slice() 和 substr() 方法不同的是,substring() 不接受负的参数。
String.prototype.my_substring = function(start, stop = this.length) {
    // 处理负数问题
    start = start < 0 ? 0 : start;
    stop = stop < 0 ? 0 : stop;
    start = Math.min(start, stop);
    stop = Math.max(start, stop);
    // if (start >= stop) {
    //     [start, stop] = [stop, start]
    // }
    // 大的在后面,小的在前面
    start = start < this.length ? start : this.length;
    stop = stop < this.length ? stop : this.length;
    let str = ''
    for (let i = start; i < stop; i++) {
        str += this[i];
    }
    return str;
}
console.log("12345678".my_substring(-4, 1))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值