slice / splice / split这三个方法,不仅单词拼写非常像,而且字符串和数组涉及其中几个方法,非常容易混淆,有必要写篇文章来记录一下。
arrayObject.slice( start [,end] )
start
开始选取的位置;如果为负,将从数组尾部开始算起。即-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
end
结束选取的位置。如果未指定该参数,那么切分的数组包含从 start
到数组结束的所有元素。如果为负,将从数组尾部开始算起。
start含,end不含,所以选取的是 [start, end) 的前闭后开的区间。
该方法并不会修改数组,而是返回一个子数组。
arrayObject.splice(index, howmany [,item1,.....,itemX] )
index
进行操作的位置,为负则从数组尾部开始算起。
howmany
要删除的项目数量。如果设置为 0,则不会删除项目。
item1, ..., itemX
向数组添加的新项目,用来替代前一个参数删掉的那些项目。
splice() 方法会直接对数组进行修改。
上面两个方法怎么区分?splice比slice多了一个字母,所以功能更强大,参数更多,就这么记。
上面提到的“位置”,即
start
、end
、index
这些参数,我以前是按照第几个元素来理解的,不过经常会忘记到底包不包含,开区间还是闭区间;后来发现,start
、end
、index
其实指的是元素之间的空隙,而不是指的是某个元素。比如有7个元素的数组,那么就有8个空隙啦。0就表示第一个元素左边的空隙,1表示第一个元素右边的空隙,也就是第二个元素左边的空隙,以此类推;最后一个元素的右边空隙标记也是0,-1表示最后一个元素左边的空隙,同时也是倒数第二个元素右边的空隙,倒数第二个元素左边的空隙标记为-2,以此类推。arrayObject.slice( start [,end] )想象成在start和end空隙处插上两把刀,然后取出两刀间隔之间的内容。
stringObject.slice( start [,end] )
这个和数组的slice方法类似。
**!!Strig没有splice方法!!**我是这么记的:String是不可改变的,Array的splice方法会改变数组,所以String没有这个方法!
stringObject.split( separator [,howmany] )
separator
字符串或正则表达式,从该参数指定的地方分割 stringObject。如果 separator 是包含子表达式的正则表达式,那么返回的数组中包括与这些子表达式匹配的字串,但不包括与整个正则表达式匹配的文本(每个子表达式匹配的结果会分别成为结果数组的项目)。
howmany
该参数可指定返回的数组的最大长度。
这个函数就是数组的join函数的逆向操作,所以当然是String独有的方法咯,数组是没有的。
此外,字符串还有两个函数经常混淆的:
stringObject.substr( start [,length] )
start
同上
length
子串中的字符数,必须是数值,如果省略了该参数,则一直到结尾。
stringObject.substring( start [,stop] )
与 slice() 类似,不过,substring() 不接受负的参数(负数将会转换为0),此外,如果start
> stop
,substring是会自动交换这两个参数的,而slice方法不会(特别注明:负数在slice中表示从逆向开始数,所以这里说的大小指的是空隙中左边的小,在右边的大)。
8月份太忙了,一篇文章都没有。到了新的小组以后,就像到了另外一家公司一样。