JavaScript字符串处理:substring, substr, slice





从字符串中提取某一部分是非常容易弄懂的。在Javascript中有三个不同的内置函数可以完成这个操作。正是因为这样,通常初学者很困惑不知道该选哪一个。更糟糕的是,有时很容易就中了圈套而选择一个错误的函数。

字符串的 substring (ECMAScript 5.1 规定 章节15.5.4.15) 是做字符检索的第一个正确选择。这个 substring 函数可以有两个数字做为参数,用来分别指明截取的字符在字符串中的开始和结束(包含结束)位置。另一种情况,如果结束位置的值小于开始位置,函数substring在截取字符时能智能交换开始和结束位置。下面的代码段是一个substring函数的实例:

var a = 'The Three Musketeers';
a.substring(4, 9);     'Three'
a.substring(9, 4);     'Three'

非常多的Javascript环境(包含非常多的现代网页浏览器)也实现了一个不同于substring 的函数,叫做 substr (章节 B.2.3).。但是, substr 的参数分别是开始字符的位置和截取字符的长度。实例如下:

var b = 'The Three Musketeers';
b.substr(4, 9);     'Three Mus'
b.substr(9, 4);     ' Mus'


当同时使用这两个函数时,情况会非常混乱。很容易弄混它们,从而得到一个错误的结果。函数名也没有一点帮助,substring 和 substr,它们如此的相似。如果不查看文档和规定,就会多一个选择错误的机会。 

还有一些更容易混淆的,字符串对象同样支持 slice (章节 15.5.4.13),和 Array’s slice 很像。总之而言, slice 有一个功能和 substring相同(支持开始和结束位置)。但是,它们有一点不同。如果结束位置小于开始位置, slice 不会交换这两个值。换名话说,它跟随数组的 slice 的处理方式,返回一个空值。

var c = 'The Three Musketeers';
c.slice(4, 9);       'Three'
c.slice(9, 4);       ''

上面三个函数都可以添加两个参数并且基于这些参数值截取字符。但是结果却不同。另外,它和数组方法中的混乱情况很像 (看我先前的文章 JavaScript Array: slice vs splice)

当我们写自己的Javascript库时,我们能忽视这种情况的发生吗?解决方案是去避免API导致这种情况。任何时候一个新的公用函数被引进时,搜索现存的函数中是否有相同功能去避免这种混乱。

预防是最佳的处方,建议弄清楚函数的细节。




展开阅读全文

没有更多推荐了,返回首页