String.prototype.split

分割 string, 返回一个数组。

.split ( separator, limit )

两个参数都是可选的。

separator 可以是 String 或 Object。若 separator 是 undefined, 返回 [string]

'abc'.split() // ["abc"]
''.split()    // [""]

limit 限制结果数组的长度,在操作过程中当达到 limit 时返回结果数组。若 limit 为 0 则返回空数组。

var str = 'abc'
str.split('b')     // ["a", "c"]
str.split('b', 1)  // ["a"]
str.split('b', 0)  // []

separator 为 String

var str = 'abc'
str.split('a')   // ["", "bc"]
str.split('b')   // ["a", "c"]
str.split('c')   // ["ab", ""]
str.split('abc') // ["", ""]

怎么理解呢?

'abbc'.split('b') // ["a", "", "c"]

// 图解:ab|b|c
// slice(0, 1)
// slice(2, 2)
// slice(3)
// 注意 slice(start, end),不包含 index end

若 separator 为空字符串

'abc'.split('')  // ["a", "b", "c"]
''.split('')     // [] 结果数组不包含 separator

separator 为 Object

Object 有 @@split 方法,比如 RegExp。

var str = 'a  bc'
str.split(/\s/)   // ["a", "", "bc"]
str.split(/\s*/)  // ["a", "b", "c"]
str.split(/\s+/)  // ["a", "bc"]

当 RegExp 有捕获,则结果数组中包含捕获。把 separator 放到捕获中,这样就可以看清 separator

'a  bc'.split(/(\s*)/)  // ["a", "  ", "b", "", "c"]
'abc'.split(/(abc)/) // ["", "abc", ""]

separator 为其它时,自动转为 String。

'null'.split(null) // ['', '']
'123'.split(1) // ['', '23']