JS截取与分割字符串常用技巧总结:
1. substring()
str.substring(start,end)
表示从start到end之间的字符串,包括start位置的字符但不包括end位置的字符(含头不含尾)
2. substr()
substr(start,length)
表示从start位置开始,截取length长度的字符
3. split()
使用一个指定的分隔符把一个字符串分割存储到数组
var str=”jpg|bmp|gif|ico|png”;
var arr=str.split(“|”)
//arr是一个包含字符值"jpg"、"bmp"、"gif"、"ico"和"png"的数组
4. join()
使用您选择的分隔符将一个数组合并为一个字符串
5. indexOf()
返回字符串中匹配子串的第一个字符的下标
6. lastIndexOf()
返回从右向左出现某个字符或者字符串的首个字符索引值(与indexOf相反)
我们在调用操作字符串的方法时,没有任何方法是可以直接改变字符串的:
var str = 'TuYuanYangHA';
str.slice(1);
str.substr(1);
str.trim(1);
str.toLowerCase(1);
str[0] = 1;
console.log(str); // TuYuanYangHA
在上面的代码中我们对str调用了几个方法,无一例外,这些方法都在原字符串的基础上产生了一个新字符串,而非直接去改变str,这就印证了字符串的不可变性。
那么,当我们继续调用下面的代码:
str += '6'
console.log(str); // TuYuanYangHA6
你会发现,str的值被改变了,这不就打脸了字符串的不可变性么?其实不然,我们从内存上来理解:
在JavaScript中,每一个变量在内存中都需要一个空间来存储。
内存空间又被分为两种,栈内存与堆内存。
由于栈中的内存空间的大小是固定的,那么注定了存储在栈中的变量就是不可变的。
在上面的代码中,我们执行了str += '6'的操作,实际上是在栈中又开辟了一块内存空间用于存储'TuYuanYangHA6',然后将变量str指向这块空间,所以这并不违背不可变性的特点。