js字符串/数组切片&组合

1,848 阅读2分钟

字符串的切分和组合

  • 切分

substring & substr & slice 截取字符串不改变原字符串

str.substr(start[, length]) 获取字符串str从start开始长度为length的子字符串;❗️已不建议使用

str.substring(indexStart[, indexEnd]) 获取字符串str从indexStart到indexEnd的子字符串;

str.slice(indexStart[, indexEnd]) 从字符串str中提取indexStart到indexEnd的子字符串并返回一个新字符串;

`substr`
如果 start 为负值,被认为是 length+start;
如果 start > length ,则返回空字符串;
如果 length 为空,则截取长度为 start 到结尾;
如果 length <= 0,则返回空字符串;
`substring` & 'slice'
同: 开区间,不包含索引为indexEnd的那个字符;
    如果省略 indexEnd,提取字符到字符串末尾;
    如果 indexStart 等于 indexEnd,返回一个空字符串;
    如果任一参数为 NaN,则认定为0;
    如果任一参数大于 length,则被当作 length;

异: 如果 indexStart 大于 indexEnd,则 substring 的执行效果就像两个参数调换了一样;slice则返回空字符串;
    如果任一参数小于 0 ,substring 当作 0;slice计算为 length+(-i);

split 分割字符串不影响原字符串

str.split([separator[, limit]]) 以separator为分隔符分割字符串并返回一个子字符串组成的数组,limit限制的是子字符串的数量,separator可以为字符串或正则表达式。

如果有两个分隔符紧挨着就会增加一个空字符串作为子字符串。

charAt & charCodeAt 获取字符串索引处的值

str.charAt(index) 返回字符串str的index处的字符,如果index为空则返回 str.charAt(0),如果 index >= length 则返回空字符串

str.charCodeAt 返回相应索引值处字符的Unicode码点

  • 组合

concat 不影响原字符串

str.concat(str2, [, ...strN]) 将str2...strN拼接到str后形成一个新的字符串返回

相较于字符串直接相加,如果参数为其他类型,concat可以自动将参数转化为字符串进行拼接

数组的切分和组合

切分

slice

arr.slice([begin[, end]]) 提取 [begin,end) 的子数组。不会修改原数组,返回一个浅拷贝原数组中元素的一个新数组,基本规则和字符串slice一致

splice

array.splice(start[, deleteCount[, item1[, item2[, ...]]]] ) 从start开始删除deleteCount个元素,并在此处添加item1,item2...

-   如果 `start` 超出了数组的长度,则从数组末尾开始添加内容;如果是负值,则表示从数组倒数位开始;如果负数的绝对值大于数组的长度,则表示开始位置为第0位。
-   如果 `deleteCount` 被省略了,或者它的值大于等于`array.length - start`(也就是说,如果它大于或者等于`start`之后的所有元素的数量),那么`start`之后数组的所有元素都会被删除。
-   如果 `deleteCount` 是 0 或者负数,则不移除元素。这种情况下,至少应添加一个新元素。

组合

join

arr.join([separator]) 以分隔符separator连接数组元素并返回成字符串

如果缺省,则默认为','作为分割符

concat

var new_array = old_array.concat(value1[, value2[, ...[, valueN]]]) 合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。

如果省略了所有 `valueN` 参数,则 `concat` 会返回调用此方法的现存数组的一个浅拷贝。

扩展运算符

和concat一样,不改变原数组的浅拷贝。

扩展运算符相关可以参考 segmentfault.com/a/119000002…