老生常谈,无论是职场达人还是初出茅庐的小白相信对JavaScript中的字符串都不会陌生吧,而且字符串这个元素在前端整个开发的过程中出现的频率、重要程度 ... 都是无可比拟的,今天我们来一起揭开JavaScript下字符串的神秘面纱,希望真正做到深入浅出。
## 在JavaScript中String类型是基本数据类型,这一点与其在Java等其它后台语言中为引用类型不同。
## 定义字符串:
let str = "好好学习,天天向上";
一、字符串常用的19个方法:
> -1).查找指定字符所在位置的索引
①.indexOf("指定字符");从前向后找
// A.indexOf(Xxx);从前向后找
console.log(str.indexOf("学"));// 打印 2
console.log(str);// 打印 好好学习,天天向上
/** * -1).用处:从前向后查找指定字符的索引 * -2).用法:str.indexOf("指定字符"); * -3).返回值:如果找到 -> 返回指定字符所在位置的索引 * 如果未找到 -> 返回-1 * -4).是否改变原字符串:否 */
②.lastIndexOf("指定字符");从后向前找
// B.lastIndexOf(Xxx);从后向前找
console.log(str.lastIndexOf("习"));// 打印 3
console.log(str);// 打印 好好学习,天天向上
/** * -1).用处:从后向前查找指定字符所在位置的索引 * -2).用法:str.lastIndexOf("指定字符"); * -3).返回值:如果找到 -> 返回指定字符所在位置的索引 * 如果未找到 -> 返回-1 * -4).是否改变原字符串:否 */
③.search("指定字符"/正则表达式); -> 支持正则表达式
// C.search(Xxx);支持正则表达式
console.log(str.search(","));// 打印 4
console.log(str.search(/[\u4e00-\u9fa5]$/));// 打印 8
console.log(str);// 打印 好好学习,天天向上
/** * -1).用处:查找指定字符所在位置的索引 * -2).用法:str.search("指定字符"/正则表达式); * -3).返回值:如果找到 -> 返回指定字符所在位置的索引 * 如果未找到 -> 返回-1 * -4).是否改变原字符串:否 */
> -2).查找指定索引对应的字符
①.charAt(索引);
// A.charAt(Xxx);
console.log(str.charAt(0));// 打印 好
/** * -1).用处:通过指定索引查找对应字符串 * -2).用法:str.charAt(指定索引); * -3).返回值:如果找到 -> 返回对应字符 * 如果未找到 -> 返回"" -> 空字符串 * -4).是否改变原字符串:否 */
②.charCodeAt(索引);
// B.charCodeAt(Xxx);
console.log(str.charCodeAt(0));// 打印 22909
console.log(str)// 打印 好好学习,天天向上
/** * -1).用处:通过指定索引查找对应字符串所对应的Unicode编码 * -2).用法:str.charCodeAt(指定索引); * -3).返回值:如果找到 -> 返回指定位置的字符的Unicode编码 * 如果未找到 -> 返回NaN * -4).是否改变原字符串:否 */
③.match("字符"/正则表达式); -> 支持正则表达式
console.log(str.match("天"));// 打印 [ '天', index: 5, input: '好好学习,天天向上' ]
console.log(Object.prototype.toString.call(str.match("天")));// 打印 [object Array]
console.log(str.match(/[好]/g));// 打印 [ '好', '好' ]
console.log(str);// 打印 好好学习,天天向上
/** * -1).用处:通过指定字符查找对应字符,支持正则表达式 * -2).用法:str.match("字符"/正则表达式); * -3).返回值:如果找到 -> 返回一个存储指定字符的数组 * 如果未找到 -> 返回null * -4).是否改变原字符串:否 */
> -3).字符串的截取
①.substr(起始索引, 截取个数);
// A.substr(num1, num2);
console.log(str.substr(0, 2));// 打印 好好
console.log(str);// 打印 好好学习,天天向上
/** * -1).用处:截取字符串 * -2).用法:str.substr(起始索引, 截取的个数); * -3).返回值:返回一个截取的新字符串 * -4).是否改变原字符串:否 */
## 拓展 -> 基于substr方法实现字符串克隆
console.log(str.substr(0, str.length));// 打印 好好学习,天天向上
②.substring(起始索引, 结束索引);左闭右开
// B.substring(起始索引, 结束索引);左闭右开
console.log(str.substring(0, 4));// 打印 好好学习
console.log(str);// 打印 好好学习,天天向上
/** * -1).用处:截取字符串 * -2).用法:str.substring(起始索引, 结束索引); * -3).返回值:返回一个截取的新字符串 * -4).是否改变原字符串:否 */
## 拓展 -> 基于substring方法实现字符串克隆
// 拓展 -> 基于substring方法实现字符串克隆
console.log(str.substring(0, str.length));// 打印 好好学习,天天向上
③.slice(起始索引, 结束索引);左闭右开,支持负数索引
// C.slice(起始索引, 结束索引);
console.log(str.slice(0, 4));// 打印 好好学习
console.log(str.slice(0, -1));// 打印 好好学习,天天向
/** * 负数索引的计算方式: 9 + -1 * str.slice(0, -1) => str.slice(0, str.length + -1) */
/** * -1).用处:截取字符串,支持负数索引 * -2).用法:str.slice(起始索引, 结束索引); * -3).返回值:返回一个截取的新字符串 * -4).是否改变原字符串:否 */
## 拓展 -> 基于slice方法实现字符串克隆
console.log(str.slice(0, str.length));// 打印 好好学习,天天向上
> -4).字符串拆分、替换
①.拆分:split("分隔符");
// A.split("分隔符");
console.log(str.split(","));// 打印 [ '好好学习', '天天向上' ]
console.log(str);// 打印 好好学习,天天向上
/** * -1).用处:分割字符串 * -2).用法:str.split("分隔符"); * -3).返回值:返回分割完成的字符串数组 * -4).是否改变原字符串:否 */
②.替换:replace("被替换字符", "替换字符");
let strr = str.slice(0, str.length);
console.log(strr.replace("好好", "认真"));// 打印 认真学习,天天向上
console.log(strr);// 打印 好好学习,天天向上
/** * -1).用处:替换指定字符 * -2).用法:str.replace("旧字符串", "新字符串"); * -3).返回值:返回替换完成的字符串 * -4).是否改变原字符串:否 */
> -5).字符的大小写转换
①.小写转大写:toUpperCase();
// A.toUpperCase
strr = "Hello World";
console.log(strr.toUpperCase());// 打印 HELLO WORLD
console.log(strr);// 打印 Hello World
②.大写转小写:toLowerCase();
strr = strr.toUpperCase();
console.log(strr);// 打印 HELLO WORLD
console.log(strr.toLowerCase());// 打印 hello world
> -6).查找指定字符
①.includes("指定字符");在整个字符串中找
// A.includes("指定字符");
console.log(str.includes("天"));// 打印 true
console.log(str);// 打印 好好学习,天天向上
/** * -1).用处:查找指定字符 * -2).用法:str.includes("指定字符"); * -3).返回值:如果找到 -> 返回true * 如果未找到 -> 返回false * -4).是否改变原字符串:否 */
②.startsWith("指定字符");仅仅在开头找
// B.startsWith("指定字符");
console.log(str.startsWith("好"));// 打印 true
console.log(str);// 打印 好好学习,天天向上
/** * -1).用处:查找指定字符(仅查找字符串开头) * -2).用法:str.startsWith("指定字符"); * -3).返回值:如果找到 -> 返回true * 如果未找到 -> 返回false * -4).是否改变原字符串:否 */
③.endsWith("指定字符");仅仅在结尾找
// C.endsWith("指定字符");
console.log(str.endsWith("上"));// 打印 true
console.log(str);// 打印 好好学习,天天向上
/** * -1).用处:查找指定字符(仅查找字符串结尾) * -2).用法:str.endsWith("指定字符"); * -3).返回值:如果找到 -> 返回true * 如果未找到 -> 返回false * -4).是否改变原字符串:否 */
> -7).重复字符串
①.repeat(Xxx);
/** * 注意: * -1).如果参数为小数则向下取整。 * -2).如果参数为非有效数字(非数字字符串/NaN)则按0计算重复次数。 * -3).如果参数是数字字符串/布尔值,先进行数据类型转换为Number再计算重复次数。 */
console.log(str.repeat(2.6));// 打印 好好学习,天天向上好好学习,天天向上
console.log(str);// 打印 好好学习,天天向上
console.log(str.repeat("哈"));// 打印为空
console.log(str.repeat(NaN));// 打印为空
console.log(str.repeat("2"));// 打印 好好学习,天天向上好好学习,天天向上
console.log(str.repeat(true));// 打印 好好学习,天天向上
/** * -1).用处:重复字符串 * -2).用法:str.repeat(Xxx); * -3).返回值:重复指定次数的字符串 * -4).是否改变原字符串:否 */
> -8).字符串补全
①.padStart(指定字符串长度, 填充元素);在开头填充
// A.padStart(指定字符串的长度, 替换字符);
console.log(str.padStart(11, "ab"));// 打印 ab好好学习,天天向上
console.log(str);// 打印 好好学习,天天向上
/** * -1).用处:字符串补全(从头补全) * -2).用法:str.padStart(指定字符串的长度, 替换字符); * -3).返回值:补全后的字符串 * -4).是否改变原字符串:否 */
②.padEnd(指定字符串长度, 填充元素);在结尾填充
// B.padEnd(指定字符串的长度, 替换字符);
console.log(str.padEnd(11, "ab"));// 打印 好好学习,天天向上ab
console.log(str);// 打印 好好学习,天天向上
/** * -1).用处:字符串补全(从尾补全) * -2).用法:str.padStart(指定字符串的长度, 替换字符); * -3).返回值:补全后的字符串 * -4).是否改变原字符串:否 */
> -9).字符串去除首尾空格
①.trim();去除首尾空格
let str_4 = " 好好 学习 ";
console.log(str_4.trim());//好好 学习
console.log(str_4);// 好好 学习
/** * -1).用处:字符串去除空格 * -2).用法:str.trim(); * -3).返回值:返回去除首尾空格的新字符串 * -4).是否改变原字符串:否 */
二、字符串遍历器
for ... of ...
for(let item of str) {
console.log(item);
/**
* 天
* 天
* 向
* 上
*/
}
三、模板字符串
定义变量
let price = 100;
记得我们ES5包括之前拼接字符串都是一个耗时、不爽的操作...一溜加号,写起来费劲看着也不好看
let str_1 = "苹果价格:" + price + "元";
console.log(str_1);// 打印 苹果价格:100元
ES6的模板字符串:解决了这个问题 ...
## 模板字符串的使用方式:通过``(``在tab键上面那个键)包裹,通过${Xxx}引用变量。
// ES6的模板字符串 -> 通过``(``在tab键上面那个键)包裹,通过${Xxx}引用变量。
str_1 = `苹果价格:${price}元`;
console.log(str_1);// 打印 苹果价格:100元
这样一来不仅不用写加号,而且更加直观,模板字符串还有一个好处就是保留格式:
ES5
let str_2 = "1" +
"2";
console.log(str_2);// 打印 12
ES6的模板字符串会保留我们的敲'回车'以后的格式
let str_3 = `1
2`;
console.log(str_3);
打印结果:↓↓↓
总结:本章节主要介绍了字符串的常用的20种方法以及ES6提供的字符串遍历器和模板字符串。基本上本片博文涵盖了我们日常开发在字符串方面的绝大多数操作。希望与大家共勉!!!如有意见或者建议请在下方留言,我会在第一时间回复!!!