千家信息网

JavaScript的trim函数实现方法有哪些

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容主要讲解"JavaScript的trim函数实现方法有哪些",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"JavaScript的trim函数实现方法
千家信息网最后更新 2026年11月02日JavaScript的trim函数实现方法有哪些

本篇内容主要讲解"JavaScript的trim函数实现方法有哪些",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"JavaScript的trim函数实现方法有哪些"吧!

实现1

String.prototype.trim = function() {
return this.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

看起来不怎么样,动用了两次正则替换,实际速度非常惊人,主要得益于浏览器的内部优化。一个著名的例子字符串拼接,直接相加比用Array做成的StringBuffer还快。base2类库使用这种实现.

实现2

String.prototype.trim = function() {
return this.replace(/^\s+/, '').replace(/\s+$/, '');
}

和实现1很相似,但稍慢一点,主要原因是它最先是假设至少存在一个空白符。Prototype.js使用这种实现,不过其名字为strip,因为Prototype的方法都是力求与Ruby同名。

实现3

String.prototype.trim = function() {
return  this.substring(Math.max(this.search(/\S/), 0),this.search(/\S\s*$/) + 1);
}

以截取方式取得空白部分(当然允许中间存在空白符),总共调用了四个原生方法。设计得非常巧妙,substring以两个数字作为参数。Math.max以两个数字作参数,search则返回一个数字。速度比上面两个慢一点,但比下面大多数都快。

实现4

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

这个可以称得上实现2的简化版,就是利用候选操作符连接两个正则。但这样做就失去了浏览器优化的机会,比不上实现3。由于看来很优雅,许多类库都使用它,如JQuery与mootools

实现5

String.prototype.trim = function() {
var str = this;
str = str.match(/\S+(?:\s+\S+)*/);
return str ? str[0] : '';
}

match是返回一个数组,因此原字符串符合要求的部分就成为它的元素。为了防止字符串中间的空白符被排除,我们需要动用到非捕获性分组(?:exp)。由于数组可能为空,我们在后面还要做进一步的判定。好像浏览器在处理分组上比较无力,一个字慢。所以不要迷信正则,虽然它基本上是万能的。

实现6

String.prototype.trim = function() {
return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, '$1');
}

把符合要求的部分提供出来,放到一个空字符串中。不过效率很差,尤其是在IE6中。

实现7

String.prototype.trim = function() {
return this.replace(/^\s*(\S*(?:\s+\S+)*)\s*$/, '$1');
}

和实现6很相似,但用了非捕获分组进行了优点,性能效之有一点点提升。

实现8

String.prototype.trim = function() {
return this.replace(/^\s*((?:[\S\s]*\S)?)\s*$/, '$1');
}

沿着上面两个的思路进行改进,动用了非捕获分组与字符集合,用?顶替了*,效果非常惊人。尤其在IE6中,可以用疯狂来形容这次性能的提升,直接秒杀火狐。

实现9

String.prototype.trim = function() {
return this.replace(/^\s*([\S\s]*?)\s*$/, '$1');
}

这次是用懒惰匹配顶替非捕获分组,在火狐中得到改善,IE没有上次那么疯狂。

实现10

String.prototype.trim = function() {
var str = this,
whitespace = '\n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000';
for (var i = 0,len = str.length; i < len; i++) {
if (whitespace.indexOf(str.charAt(i)) === -1) {
str = str.substring(i);
break;
}
}
for (i = str.length - 1; i >= 0; i--) {
if (whitespace.indexOf(str.charAt(i)) === -1) {
str = str.substring(0, i + 1);
break;
}
}
return whitespace.indexOf(str.charAt(0)) === -1 ? str : '';
}

我只想说,搞出这个的人已经不是用牛来形容,已是神一样的级别。它先是把可能的空白符全部列出来,在第一次遍历中砍掉前面的空白,第二次砍掉后面的空白。全过程只用了indexOf与substring这个专门为处理字符串而生的原生方法,没有使用到正则。速度快得惊人,估计直逼上内部的二进制实现,并且在IE与火狐(其他浏览器当然也毫无疑问)都有良好的表现。速度都是零毫秒级别的。

实现11

String.prototype.trim = function() {
var str = this,  str = 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;
}

实现10已经告诉我们普通的原生字符串截取方法是远胜于正则替换,虽然是复杂一点。但只要正则不过于复杂,我们就可以利用浏览器对正则的优化,改善程序执行效率,如实现8在IE的表现。我想通常不会有人在项目中应用实现10,因为那个whitespace 实现太长太难记了(当然如果你在打造一个类库,它绝对是首先)。实现11可谓其改进版,前面部分的空白由正则替换负责砍掉,后面用原生方法处理,效果不逊于原版,但速度都是非常逆天。

实现12

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

实现10与实现11在写法上更好的改进版,注意说的不是性能速度,而是易记与使用上。和它的两个前辈都是零毫秒级别的,以后就用这个来工作与吓人。

下面是老外给出的比较结果,执行背景是对Magna Carta 这文章(超过27,600字符)进行trim操作。

实现Firefox 2IE 6
trim115ms< 0.5ms
trim231ms< 0.5ms
trim346ms31ms
trim447ms46ms
trim5156ms1656ms
trim6172ms2406ms
trim7172ms1640ms
trim8281ms< 0.5ms
trim9125ms78ms
trim10< 0.5ms< 0.5ms
trim11< 0.5ms< 0.5ms
trim12< 0.5ms< 0.5ms

到此,相信大家对"JavaScript的trim函数实现方法有哪些"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

方法 正则 空白 字符 两个 速度 字符串 浏览器 分组 浏览 空白符 部分 函数 惊人 性能 数字 火狐 级别 处理 复杂 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 湖南永感互联网科技有限公司 智能科技公司是互联网公司吗 互联网与科技发展 网络科技有限互联网 广西互联网科技公司 互联网 视角下的科技创新 苏州大垚互联网科技 长亮科技互联网金融 人人互联网科技是培训 互联网 科技服务平台 蓝色互联网科技 汉立互联网科技有限公司联系电话 深圳市运趣互联网科技有限公司 温州喔噻互联网科技有限公司 恒生互联网科技指数跳水 洛阳昕诺飞互联网科技有限公司 佛山市拉法互联网科技有限公司 互联网与数字科技关系 互联网科技手机排行榜 互联网科技职业技能培训学校 喔噻互联网科技有限公司 百单网互联网科技有限公司怎么样 科技互联网产品 重庆互联网络科技 云电互联网科技 成都仁贤领冠互联网科技有限公司 上海创道互联网络科技有限公司 容联科技互联网电商 深圳互联网科技园地址 互联网科技品牌
0