slice / splice / split ,晕了没?

slice / splice / split这三个方法,不仅单词拼写非常像,而且字符串和数组涉及其中几个方法,非常容易混淆,有必要写篇文章来记录一下。

数组Array

slice

arrayObject.slice( start [,end] )

start 开始选取的位置;如果为负,将从数组尾部开始算起。即-1 指最后一个元素,-2 指倒数第二个元素,以此类推。

end 结束选取的位置。如果未指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果为负,将从数组尾部开始算起。

start含,end不含,所以选取的是 [start, end) 的前闭后开的区间。

该方法并不会修改数组,而是返回一个子数组。

splice

arrayObject.splice(index, howmany [,item1,.....,itemX] )

index 进行操作的位置,为负则从数组尾部开始算起。

howmany 要删除的项目数量。如果设置为 0,则不会删除项目。
item1, ..., itemX 向数组添加的新项目,用来替代前一个参数删掉的那些项目。

splice() 方法会直接对数组进行修改。


上面两个方法怎么区分?splice比slice多了一个字母,所以功能更强大,参数更多,就这么记。

上面提到的“位置”,即startendindex 这些参数,我以前是按照第几个元素来理解的,不过经常会忘记到底包不包含,开区间还是闭区间;后来发现,startendindex 其实指的是元素之间的空隙,而不是指的是某个元素。比如有7个元素的数组,那么就有8个空隙啦。0就表示第一个元素左边的空隙,1表示第一个元素右边的空隙,也就是第二个元素左边的空隙,以此类推;最后一个元素的右边空隙标记也是0,-1表示最后一个元素左边的空隙,同时也是倒数第二个元素右边的空隙,倒数第二个元素左边的空隙标记为-2,以此类推。arrayObject.slice( start [,end] )想象成在start和end空隙处插上两把刀,然后取出两刀间隔之间的内容。


字符串String

slice

stringObject.slice( start [,end] )

这个和数组的slice方法类似。

splice(无!)

!!Strig没有splice方法!!我是这么记的:String是不可改变的,Array的splice方法会改变数组,所以String没有这个方法!

split

stringObject.split( separator [,howmany] )

separator 字符串或正则表达式,从该参数指定的地方分割 stringObject。如果 separator 是包含子表达式的正则表达式,那么返回的数组中包括与这些子表达式匹配的字串,但不包括与整个正则表达式匹配的文本(每个子表达式匹配的结果会分别成为结果数组的项目)。
howmany 该参数可指定返回的数组的最大长度。

这个函数就是数组的join函数的逆向操作,所以当然是String独有的方法咯,数组是没有的。


此外,字符串还有两个函数经常混淆的:

substr

stringObject.substr( start [,length] )

start 同上
length 子串中的字符数,必须是数值,如果省略了该参数,则一直到结尾。

substring

stringObject.substring( start [,stop] )

与 slice() 类似,不过,substring() 不接受负的参数(负数将会转换为0),此外,如果start > stop,substring是会自动交换这两个参数的,而slice方法不会(特别注明:负数在slice中表示从逆向开始数,所以这里说的大小指的是空隙中左边的小,在右边的大)。


8月份太忙了,一篇文章都没有。到了新的小组以后,就像到了另外一家公司一样。

标签: slice, splice, split

添加新评论