字符串的一些操作
- 字符串不可变:
- 旧的字符串赋值在一个变量上,给变量重新赋值新的字符串(完全新的字符串,或者拼接后字符串),旧的字符串不是被覆盖;在内存的游离状态;
- 所以尽量避免大量使用字符串的拼接;这个算性能优化的一点;
- 查找字符:
- indexOf:
// 作用:查询字符所在字符串的位置;
// 参数:查询字符
// 返回:下标,若没有查询到,返回-1;
var str = '相顾无言,唯有泪千行';
var key = str.indexOf("苏轼");
console.log(key);
// 使用场景:查询是否有敏感字;
- lastIndexOf 用法和indexOf一样,只不过是从后面开始找
- charAt:
// 这个方法用于获取字符串中位于指定位置的字符
var str = '我爱中华人民共和国';
console.log(str.charAt(2));
- charCodeAt :
// 这个方法用于获取字符串中位于指定位置的字符的ASCII码
var str = 'abcdef'
console.log(str.charCodeAt(0));
- String-split-案例
// 案例:解析地址`b.com?id=01&name=02`中的参数
// 解析:id=01&name=02 变成对象 {id:01,name:02}
var str = "b.com?id=01&name=02";
var arr = str.split("?");
// console.log(arr);得到的是一个数组,数组中有两个值(问号前后的值)
str = arr[1];//选择数组中的第二个值
// console.log(str);
var arr_1 = str.split("&");
// console.log(arr_1); ["id=1", "name=2"]
// 遍历:
var obj = {};
var one, key, val;
for (var i = 0; i < arr_1.length; i++) {
// 其中的一样被分隔为数组 ["id", "1"]
one = arr_1[i].split("="); //
// 数组中第一项:对象中属性名 键
key = one[0]; // id
// 数组中第二项:对象中属性值 值
val = one[1]; // "1"
// 对象上设置 对象[属性名]
obj[key] = val; // obj["id"] = "1";
}
console.log(obj);
- String-拼接与截取
// var str = "abcdefghjk";
// concat
// 作用:可以与多个字符串进行拼接
// 参数:拼接的数据
// 返回:拼接后的字符串;
// var res = str.concat("--------", '88888');
// console.log(str, res);
// ------------------------------------------------------截取
// substring
// 作用:截取字符串
// 参数:第一个参数:截取开始的下标(包括);第二个参数:截取结束的下标(不包括)
// 返回:截取出来的字符串
// var res = str.substring(0, 3);
// console.log(str, res);
// slice
// 作用:截取字符串;
// 参数:第一个参数:截取开始的下标(包括);第二个参数:截取结束的下标(不包括)
// 返回:截取出来的字符串
// var res = str.slice(0, 3);
// console.log(str, res);
// 特别:参数可以设置负数,遇见负数,内部(负数+字符串的长度--->值 下标)
var str = "abcdefghjk";
// var res = str.slice(-6, 7); // -6 + 10
// var res_1 = str.slice(4, 7);
// console.log(res, res_1);
// substr
// 作用:截取字符串
// 参数:第一个参数,开始下标。第二个参数,截取的个数;
// 返回:被截取新字符串,没有对原字符串修改;
var res = str.substr(2, 3);
console.log(res);
//js中substr和substring都是截取字符串中子串,非常相近,可以有一个或两个参数。
//语法:substr(start [,length]) 第一个字符的索引是0,start必选 length可选
//substring(start [, end]) 第一个字符的索引是0,start必选 end可选
//相同点:当有一个参数时,两者的功能是一样的,返回从start指定的位置直到字符串结束的子串
//var str = "hello Tony";
//str.substr(6); //Tony
//str.substring(6); //Tony
//不同点:有两个参数时
//(1)substr(start,length) 返回从start位置开始length长度的子串
//“goodboy”.substr(1,6); //oodboy
//【注】当length为0或者负数,返回空字符串
//(2)substring(start,end) 返回从start位置开始到end位置的子串(不包含end)
//“goodboy”.substring(1,6); //oodbo
//【注】:
//(1)substring 方法使用 start 和 end 两者中的较小值作为子字符串的起始点
//(2)start 或 end 为 NaN 或者负数,那么将其替换为0