《高性能javascript》中推荐的javascript字符串trim方法(假设没有原生方案)

String.prototype.trim = function() {
  var str = this.replace(/^\s+/, ""),
  end = str.length - 1,
  ws = /\s/;
  while (ws.test(str.charAt(end))) {
    end--;
  }
  return str.slice(0, end + 1);
}

解析:

使用正则表达式/^\s*/匹配字符串开始的空格,没有空跑的问题,所以选择正则匹配;

使用/\s*$/匹配字符串结尾空格,如果字符串较长,那么效率会比较低下,因为正则表达式需要从头开始扫描字符,直到确定了最后一个字符匹配位置$,才能最终匹配完成,某些浏览器做了优化,但是跨浏览性不好,性能不稳定~

鉴于上述原因,结尾使用字符串剪裁,不受长度影响。但是在结尾有长的空格时,仍然具有性能弱点。综合看,假如字符串含有一两个空格,这种方案巨快!但是代码略长,关于使用正则检测字符串结尾字符的解释,原书是这么写的:“请注意,此方案在循环中使用正则表达式检测字符串尾部的字符是否空格,尽管使用正则表达式增加了一点性能负担,但它允许你根据浏览器定义空格字符列表,以保持简短和兼容性”

下面写出最通用,性能最稳定版本,也是最容易想到的版本:

if (!String.prototype.trim) {
  String.prototype.trim = function() {
    return this.replace(/^\s+/, "").replace(/\s+$/, "");
  }
}
我个人觉得如果特别严格的需求,定制自己的trim逻辑,否则就按最简单的来~是不是感觉白说了,是的,瞎- -

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值