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 相关文章推荐
发一个自己用JS写的实用看图工具实现代码
Jul 26 Javascript
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
Jul 31 Javascript
JavaScript执行顺序详细介绍
Dec 04 Javascript
js 采用delete实现继承示例代码
May 20 Javascript
node.js [superAgent] 请求使用示例
Mar 13 Javascript
浅谈javascript中的闭包
May 13 Javascript
js微信分享API
Oct 11 Javascript
移动设备手势事件库Touch.js使用详解
Aug 18 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
Nov 25 Javascript
layui的layedit富文本赋值方法
Sep 18 Javascript
jQuery实现鼠标拖拽登录框移动效果
Sep 13 jQuery
vue项目打包后路由错误的解决方法
Apr 13 Vue.js
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
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
php连接Access数据库错误及解决方法
2013/06/20 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
2013/08/08 PHP
php网页病毒清除类
2014/12/08 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
yii插入数据库防并发的简单代码
2017/05/27 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
phpstudy隐藏index.php的方法
2020/09/21 PHP
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
2014/12/18 NodeJs
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
javascript每日必学之运算符
2016/02/16 Javascript
最常见和最有用的字符串相关的方法详解
2017/02/06 Javascript
使用AngularJS对表单提交内容进行验证的操作方法
2017/07/12 Javascript
基于vue-simplemde实现图片拖拽、粘贴功能
2018/04/12 Javascript
零基础写python爬虫之爬虫框架Scrapy安装配置
2014/11/06 Python
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
Numpy中的mask的使用
2018/07/21 Python
python 自动去除空行的实例
2018/07/24 Python
Python高级特性与几种函数的讲解
2019/03/08 Python
Python异常处理例题整理
2019/07/07 Python
利用Python实现手机短信监控通知的方法
2019/07/22 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
基于python 将列表作为参数传入函数时的测试与理解
2020/06/05 Python
python 匿名函数与三元运算学习笔记
2020/10/23 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
沙特阿拉伯网上购物:Sayidaty Mall
2018/05/06 全球购物
数据库设计的包括哪两种,请分别进行说明
2016/07/15 面试题
我的求职择业计划书
2014/04/04 职场文书
三八活动策划方案
2014/08/17 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android