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 相关文章推荐
jQuery UI Datepicker length为空或不是对象错误的解决方法
Dec 19 Javascript
JS 进度条效果实现代码整理
May 21 Javascript
实现js保留小数点后N位的代码
Nov 13 Javascript
JavaScript模拟实现继承的方法
Mar 30 Javascript
javascript实现简单的页面右下角提示信息框
Jul 31 Javascript
设置jQueryUI DatePicker默认语言为中文
Jun 04 Javascript
js eval函数使用,js对象和字符串互转实例
Mar 06 Javascript
js中let和var定义变量的区别
Feb 08 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
Apr 20 jQuery
vue实现移动端悬浮窗效果
Dec 01 Javascript
java和js实现的洗牌小程序
Sep 30 Javascript
node.js事件轮询机制原理知识点
Dec 22 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
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
解析CodeIgniter自定义配置文件
2013/06/18 PHP
解析PHP无限级分类方法及代码
2013/06/21 PHP
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
ThinkPHP中create()方法自动验证表单信息
2017/04/28 PHP
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
2016/05/20 Javascript
Node.js的npm包管理器基础使用教程
2016/05/26 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
2017/12/18 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
Angular 中使用 FineReport不显示报表直接打印预览
2019/08/21 Javascript
Vue 开发必须知道的36个技巧(小结)
2019/10/09 Javascript
原生js实现日历效果
2020/03/02 Javascript
JavaScript onclick事件使用方法详解
2020/05/15 Javascript
vue-router懒加载的3种方式汇总
2021/02/28 Vue.js
Python获取邮件地址的方法
2015/07/10 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
2017/08/08 Python
浅谈python装饰器探究与参数的领取
2017/12/01 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
2018/01/30 Python
python利用微信公众号实现报警功能
2018/06/10 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
Django框架中序列化和反序列化的例子
2019/08/06 Python
Python二元赋值实用技巧解析
2019/10/25 Python
python如何输出反斜杠
2020/06/18 Python
H&M旗下高端女装品牌:& Other Stories
2018/05/07 全球购物
Book Depository欧盟:一家领先的国际图书零售商
2019/05/21 全球购物
高校毕业生自我鉴定
2013/10/27 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
培训通知书模板
2015/04/17 职场文书
勇敢的心观后感
2015/06/09 职场文书
投诉信范文
2015/07/02 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers
python和C/C++混合编程之使用ctypes调用 C/C++的dll
2022/04/29 Python