今天碰到将字符串拆分成数组进行操作的情况,发现如果判断下字符串里有没有需要拆分的特定字符,就可以省下拆分的操作。理所当然用了indexOf。

Javascript一直在更新,比如字符串就有了一个includes方法用来判断是否包含某子串。includes方法用起来要比indexOf简洁。

然后如果要判断一个字符串是否包含好几个不同的子串,自然而然会想到正则。正则在这种情况下是代码最少的,比如:

1
/o|u|l/i.test('Hello world')
,甚至可以忽略大小写

google了一下,发现已经有相关的bench测试了:http://jsbench.github.io/#a4612afd0cd26e911ee8

可以发现indexOf比其余方式也就快个几十上百倍。当然,大家都很快,只是indexOf最快

如果考虑到判断多个子串的情况,我们可以把以上bench里的代码修改一下,把正则改复杂,然后indexOf改成多个,再次运行,你会发现:差距更大了

简单地说,就是复杂的正则,意味着更复杂的处理逻辑,效率也呈几何下降;多个indexOf效率下降很少

当然,即使最慢的正则,也足够平常使用了。不过要注意,避免用在循环里,以及缓存正则不要每次都声明。要考虑高效的话,indexOf吊打其余的,但是如果要写好多个indexOf也让人有点烦,有需要的话可以自己造个函数

拼接字符串的方法介绍

字符串拼接基本上在任何编程语言中都是非常普通而常用的功能,Javascript里也是如此。其中对HTML字符串的拼接算是比较难的,我就经常被大量的属性及引号的嵌套搞得苦不堪言。

常规但很不好用的方法

下面是一个最常用的拼HTML字符串的写法:

1
var li = '<li class="li '+dd.class+'" id="li+'+i+'"><span>'+dd.text'</span></li>';

这种方法是最好理解的(同时也可以说是执行效率最高的),但缺点也很明显:繁琐,非常容易出错,维护起来麻烦,而且代码几乎没有重用性,即使下次碰到长得差不多的还是得重写拼的语句。
继续阅读

前不久换工作了,最近一直在出差,忙得跟狗一样,所以博客都荒废许久了.

最近的工作中涉及到大量的ajax操作,本来该后台做的事也要我来做了.而现在使用的ajax函数是一个后台人员封装的—-但他又是基于jquery的ajax,所以离开了jquery这个函数就毫无作用了.而且我觉得,jquery的ajax方法是很完善的了,可以直接用,如果都有jquery了,那么他的ajax就不用白不用了.我缺少的是一个能在没有jquery的情况下使用的ajax方法.

所以我也花一天时间写了一个,参数与调用方法类似于jquery的ajax.就叫xhr吧,因为xhr=XMLHttpRequest.
继续阅读

html字符串是指'<div id=”a”>aklsdjfklsjdfl</div>’这样的带html特殊符号的字符串,我们通常要对他进行处理再输出以免输出成了真正的html元素,也就是把<变成&lt;这样的html符号代码。

如果字符串很长,里面特殊符号很多,我们该怎么简单而高效的把他们全部转码呢?循环?正则表达式?都不用!且看:

1
function bian(a){return new Option(a).innerHTML}

这就是全部了!使用方法:

1
2
3
function bian(a){return new Option(a).innerHTML}
var a = '<div id="a">aklsdjfklsjdfl</div>';
alert(bian(a));

此方法来自于:https://gist.github.com/jed/964847,非常感谢原作者!