A-A+
JS 去空格trim()最佳实践
正则的反向匹配比较慢。我对其性能进行了对比。综合速度和写法上来说,个人还是偏向于第一种写法。因为速度其实相差很少很少。从代码来说第二种比较晦涩并且并字节很多,这对于一个流量很高但需要用 trim() 很少的网站来说,第一种明显比较合适.
方案如下:
- if(!String.prototype.trim){
- String.prototype.trim = function(){
- return this.replace(/^s+|s+$/g, '');
- }
- }
上面代码测试性能上15S,后来国外网站找到了优化方法,代码如下:
- function trim10 (str) {
- var whitespace = ' nrtfx0bxa0u2000u2001u2002u2003u2004u2005u2006u2007u2008u2009u200au200bu2028u2029u3000';
- for (var i = 0; i < str.length; 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 : '';
- }
相对起来下面更好,代码如下:
- function trim11 (str) {
- 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;
- }