JS trim去空格的最佳实践


Posted in Javascript onOctober 30, 2011

刚好上次有同学提出疑问。刚好可以自测一下。先来看看老道在《JavaScript 精粹》P33 写的吧。他对 String 对象扩展了一个 trim() 方法:

Function.prototype.method = function(name, func) { 
this.prototype[name] = func; 
return this; 
}; String.method('trim', function() { 
return this.replace(/^\s+|\s+$/g, ''); 
});

熟悉吧,/^\s+|\s+$/g,这样的正则表达式。多少框架在用呢。比如 jQuery 的 trimLeft, trimRight:
// Used for trimming whitespace 
trimLeft = /^\s+/, 
trimRight = /\s+$/,

这是最佳实践么?但我们框架使用的不是这种方法(暂且称为半正则方法)。上次在其他产品组在内部 PK 的时候,说过,为什么我们框架要用下面这样的方法来实现 trim(),而不是用上面的那种。
trim: function(){ 
var str = this.str.replace(/^\s+/,''); 
for(var i= str.length - 1; i >= 0; i--){ 
if(/\S/.test(str.charAt(i))){ 
str = str.substring(0,i+1); 
break; 
} 
} 
return str; 
}

原因工友已经说了,因为正则的反向匹配比较慢。我对其性能进行了对比。综合速度和写法上来说,个人还是偏向于第一种写法。因为速度其实相差很少很少。从代码来说第二种比较晦涩并且并字节很多,这对于一个流量很高但需要用 trim() 很少的网站来说,第一种明显比较合适,看看下面的测试结果(自已测试,猛击这里):

JS trim去空格的最佳实践

啊?原来不是半正则的方式最快啊?是的,其实很多高级浏览器中已经默认提供 trim() 了。速度就不用说了,100 倍?哈哈哈。最后,方案如下:

if(!String.prototype.trim){ 
String.prototype.trim = function(){ 
return this.replace(/^\s+|\s+$/g, ''); 
} 
}
Javascript 相关文章推荐
如何实现iframe(嵌入式帧)的自适应高度
Jul 26 Javascript
通过继承IHttpHandle实现JS插件的组织与管理
Jul 13 Javascript
快速查找数组中的某个元素并返回下标示例
Sep 03 Javascript
jQuery学习笔记之jQuery原型属性和方法
Jun 09 Javascript
jQuery中dequeue()方法用法实例
Dec 29 Javascript
AngularJS学习笔记之ng-options指令
Jun 16 Javascript
JavaScript添加随滚动条滚动窗体的方法
Feb 23 Javascript
基于jQuery实现咖啡订单管理简单应用
Feb 10 Javascript
微信小程序-滚动消息通知的实例代码
Aug 03 Javascript
javascript和php使用ajax通信传递JSON的实例
Aug 21 Javascript
使用element-ui table expand展开行实现手风琴效果
Mar 15 Javascript
js实现简单的点名器随机色实例代码
Sep 20 Javascript
js中更短的 Array 类型转换
Oct 30 #Javascript
JavaScript Array Flatten 与递归使用介绍
Oct 30 #Javascript
关于图片按比例自适应缩放的js代码
Oct 30 #Javascript
js 弹出菜单/窗口效果
Oct 30 #Javascript
基于Jquery+Ajax+Json的高效分页实现代码
Oct 29 #Javascript
简单的前端js+ajax 购物车框架(入门篇)
Oct 29 #Javascript
分享一个自己写的table表格排序js插件(高效简洁)
Oct 29 #Javascript
You might like
上海永华YH-R296(华普R-96)12波段立体声收音机的分析和打理
2021/03/02 无线电
在PHP中执行系统外部命令
2006/10/09 PHP
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
2007/04/16 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
2019/10/22 PHP
nodejs 后缀名判断限制代码
2011/03/31 NodeJs
Javascript基础教程之比较null和undefined值
2016/05/16 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
2016/06/07 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
全面了解JS中的匿名函数
2016/06/29 Javascript
AngularJS实现DOM元素的显示与隐藏功能
2016/11/22 Javascript
Bootstrap CSS使用方法
2016/12/23 Javascript
简单实现jQuery弹幕效果
2017/05/06 jQuery
vue开发调试神器vue-devtools使用详解
2017/07/13 Javascript
Angular实现的进度条功能示例
2018/02/18 Javascript
setTimeout时间设置为0详细解析
2018/03/13 Javascript
微信小程序简单的canvas裁剪图片功能详解
2019/07/12 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
Python中利用原始套接字进行网络编程的示例
2015/05/04 Python
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
使用Python内置的模块与函数进行不同进制的数的转换
2016/03/12 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
python中树与树的表示知识点总结
2019/09/14 Python
Python应用自动化部署工具Fabric原理及使用解析
2020/11/30 Python
AmazeUI中模态框的实现
2020/08/19 HTML / CSS
AJAX应用和传统Web应用有什么不同
2013/08/24 面试题
银行职员思想汇报
2013/12/31 职场文书
采购主管岗位职责
2014/02/01 职场文书
心理学专业求职信
2014/06/16 职场文书
女生抽烟检讨书
2014/10/05 职场文书
社区服务活动报告
2015/02/05 职场文书
全民创业工作总结
2015/08/13 职场文书
2016年第二十届“母亲节暨幸福工程救助贫困母亲活动日”活动总结
2016/04/06 职场文书
用Python将库打包发布到pypi
2021/04/13 Python
Python Django / Flask如何使用Elasticsearch
2022/04/19 Python