常常记不清slice和splice的功能和特点,索性一口气把这四个相关的都记上:
// slice 切片
/*
array.slice(start,end)
string.slice(start,end)
特点:此操作会形成新的对象,不影响原对象的值
取值不包含第二位索引对应值
*/
var arr = [1,2,3,4,5,6];
var a = arr.slice(); //[ 1, 2, 3, 4, 5, 6 ]
var b = arr.slice(1,2); //[ 2 ]
var c = arr.slice(-3); //[ 4, 5, 6 ]
var d = arr.slice(-7); //[ 1, 2, 3, 4, 5, 6 ]
var e = arr.slice(6); //[]
// 综上所述,slice的作用原理如下
/* 假定数组长度为6
index -6 -5 -4 -3 -2 -1
0 1 2 3 4 5
value 1 2 3 4 5 6
第一位参数只要>=arr.length,则返回空;
第一位参数<-arr.length,则返回这个数组
*/
// splice 拼接
/*
arr.splice(start, count, context)
只作用于数组,并会修改原数组值
count=0时,相当于insert
*/
var months = ['Jan', 'March', 'April', 'June'];
months.splice(); // noChange [ 'Jan', 'March', 'April', 'June' ]
months.splice(1, 0, 'Feb'); //[ 'Jan', 'Feb', 'March', 'April', 'June' ]
months.splice(1); //[ 'Jan' ]
months.splice(0, 1); //[ 'Feb', 'March', 'April', 'June' ]建立在31行基础上
months.splice(-4, 1); //[ 'March', 'April', 'June' ]建立在33行基础上
months.splice(-5); // []
//split 分割 string=>array
/*
str.split([separator[, limit]])
特点:返回值是一个array,separator用来规定分割规则,limit限制返回的分割元素数量
*/
//如果 separator 包含捕获括号(),则其匹配结果将会包含在返回的数组中
var str = "Hello 1 word. Sentence number 2.";
var splits = str.split(/(\d)/,2); //[ 'Hello ', '1' ]
// console.log(splits);
var names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand ";
//(?:;|$)匹配分号或行尾,?:表示取消反向引用
var re = /\s*(?:;|$)\s*/; //['Harry Trump','Fred Barney','Helen Rigby','Bill Abel','Chris Hand','']
var re1 = /\s*(?:;)\s*/; //['Harry Trump','Fred Barney','Helen Rigby','Bill Abel','Chris Hand']
//join 连接 array=>string
/*
arr.join([separator])
特点:亦可连接类数组
*/
var a = ['Wind', 'Rain', 'Fire'];
a.join(); // "Wind,Rain,Fire"
a.join(', '); // "Wind, Rain, Fire"
a.join(' + '); // "Wind + Rain + Fire"
a.join(''); // "WindRainFire"
部分用例参考MDN