String
2022年10月14日大约 13 分钟
转义字符
Code | Output |
---|---|
\0 | 空字符 |
\' | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
\n | 换行 |
\r | 回车 |
\v | 垂直制表符 |
\t | 水平制表符 |
\b | 退格 |
\f | 换页 |
\uXXXX | unicode 码 |
\u{X} ... \u{XXXXXX} | unicode codepoint |
\xXX | Latin-1 字符(x小写) |
长字符串
代码可能含有很长的字符串,应写成多行,而不是让这一行无限延长或着被编辑器折叠
// 使用 + 运算符将多个字符串连接起来
let longString = "This is a very long string which needs " +
"to wrap across multiple lines because " +
"otherwise my code is unreadable.";
// 每行末尾使用反斜杠字符(“\”),以指示字符串将在下一行继续
// 确保反斜杠后面没有空格或任何除换行符之外的字符或缩进; 否则反斜杠将不会工作
let longString = "This is a very long string which needs \
to wrap across multiple lines because \
otherwise my code is unreadable.";
基本字符串和字符串对象
基本字符串:需要时,JavaScript会自动将基本字符串转换为字符串对象
- 字符串字面量 (通过单引号或双引号定义)
- 直接调用 String 方法(没有通过 new 生成字符串对象实例)的字符串
注意:当使用 eval 时,基本字符串和字符串对象也会产生不同的结果
- 基本字符串 作为源代码处理
- 字符串对象 被看作对象处理, 返回对象
s1 = "2 + 2"; // creates a string primitive
s2 = new String("2 + 2"); // creates a String object
console.log(eval(s1)); // returns the number 4
console.log(eval(s2)); // returns the string "2 + 2"
// 利用 valueOf 方法,我们可以将字符串对象转换为其对应的基本字符串
console.log(eval(s2.valueOf())); // returns the number 4
String.prototype.charAt()
描述:从一个字符串中返回指定的字符
语法:
str.charAt(index)
参数
- index:一个介于0 和字符串长度减1之间的整数。 (0~length-1),如果没有提供索引,charAt() 将使用 0
String.prototype.charCodeAt()
描述:返回指定位置的字符的 Unicode 编码,这个返回值是 0 - 65535 之间的整数
语法:
str.charCodeAt(index)
参数
- index:一个大于等于 0,小于字符串长度的整数,如果不是一个数值,则默认为 0
String.prototype.concat()
- 描述:将一个或多个字符串与原字符串连接合并
- 语法:
str.concat(str2, [, ...strN])
- 参数
- str2 [, ...strN]:需要连接到
str
的字符串
- str2 [, ...strN]:需要连接到
- 返回值:一个新的字符串,包含参数所提供的连接字符串**(不影响原字符串)**
- 注意:性能方面考虑,强烈建议使用赋值操作符(+, +=)代替 concat 方法
String.prototype.startsWith()
- 描述:判断当前字符串是否以另外一个给定的子字符串开头
- 语法:
str.startsWith(searchString[, position])
- 参数
- searchString:要搜索的子字符串
- position:在 str 中搜索 searchString 的开始位置,默认值为 0
String.prototype.endsWith()
- 描述:判断当前字符串是否是以另外一个给定的子字符串结尾
- 语法:
str.endsWith(searchString[, length])
- 参数
- searchString:要搜索的子字符串
- length:作为 str 的长度。默认值为 str.length
String.prototype.includes()
- 描述:判断一个字符串是否包含在另一个字符串中
- 语法:
str.includes(searchString[, position])
- 参数
- searchString:要搜索的子字符串
- position:从当前字符串的哪个索引位置开始搜寻子字符串,默认值为 0
String.prototype.indexOf()
描述:返回调用它的 String 对象中第一次出现的指定值的索引
语法:
str.indexOf(searchValue [, fromIndex])
参数
- searchString:要搜索的子字符串
- 如果没有提供确切地提供字符串,searchValue 会被强制设置为 "undefined", 然后在当前字符串中查找这个值
- fromIndex:从当前字符串的哪个索引位置开始搜寻子字符串,默认值为 0
- searchString:要搜索的子字符串
返回值:查找的字符串
searchValue
的第一次出现的索引,如果没有找到,则返回-1
注意
- 如果 searchValue 是一个空字符串,则会返回 fromIndex
- 如果 fromIndex 值大于等于字符串的长度,将会直接返回字符串的长度(str.length)
// 统计一个字符串中某个字母出现的次数
var str = 'To be, or not to be, that is the question.';
var count = 0;
var pos = str.indexOf('e');
while (pos !== -1) {
count++;
pos = str.indexOf('e', pos + 1);
}
console.log(count); // displays 4
String.prototype.lastIndexOf()
描述:返回调用String 对象的指定值最后一次出现的索引
语法:
str.lastIndexOf(searchValue[, fromIndex])
参数
- searchString:要搜索的子字符串
- 如果没有提供确切地提供字符串,searchValue 会被强制设置为 "undefined", 然后在当前字符串中查找这个值
- fromIndex:searchValue 的开头一位字符从 str 的第fromIndex位开始向左回向查找
- searchString:要搜索的子字符串
返回值:返回指定值最后一次出现的索引(该索引仍是以从左至右0开始记数的),如果没找到则返回 -1
注意
- 如果 searchValue 是一个空字符串,则会返回 fromIndex
- fromIndex 默认值是 +Infinity
- fromIndex >= str.length ,则会搜索整个字符串
- fromIndex < 0 ,则等同于 fromIndex == 0
String.prototype.localeCompare()
- 描述:一个参考字符串是否在排序顺序前面或之后或与给定字符串相同
- 语法:
referenceStr.localeCompare(compareString[, locales[, options]])
- 参数
- compareString:用来比较的字符串
- locales(可选):用来表示一种或多种语言或区域的一个符合 BCP 47 标准的字符串或一个字符串数组
- options(可选):比较选项
- 返回值
- 如果引用字符存在于比较字符之前则为负数
- 如果引用字符存在于比较字符之后则为正数
- 相等的时候返回 0
String.prototype.match()
- 描述:检索返回一个字符串匹配正则表达式的的结果
- 语法:
str.match(regexp)
- 参数
- regexp:一个正则表达式对象
- 如果传入一个非正则表达式对象,则会隐式地使用 new RegExp(obj) 将其转换为一个 RegExp
- 如果没有给出任何参数并直接使用match() 方法 ,会得到一 个包含空字符串的 Array :[""]
- regexp:一个正则表达式对象
- 返回值
- 如果使用 g 标志,则将返回与完整正则表达式匹配的所有结果,但不会返回捕获组
- 如果未使用 g 标志,则仅返回第一个完整匹配及其相关的捕获组(Array)。 在这种情况下,返回的项目将具有如下所述的其他属性
- groups: 一个捕获组数组 或 undefined(如果没有定义命名捕获组)
- index: 匹配的结果的开始位置
- input: 搜索的字符串.
String.prototype.matchAll()
- 描述:返回一个包含所有匹配正则表达式的结果及分组捕获组的迭代器
- 语法:
str.matchAll(regexp)
- 参数
- regexp:一个正则表达式对象
- 如果所传参数不是一个正则表达式对象,则会隐式地使用 new RegExp(obj) 将其转换为一个 RegExp
- regexp:一个正则表达式对象
- 返回值:一个迭代器(不可重用,结果耗尽需要再次调用方法,获取一个新的迭代器)
String.prototype.padStart()
- 描述:另一个字符串填充当前字符串的开头(如果需要的话,会重复多次)
- 语法:
str.padStart(targetLength [, padString])
- 参数
- targetLength:当前字符串需要填充到的目标长度。如果这个数值小于当前字符串的长度,则返回当前字符串本身
- padString:填充字符串。如果字符串太长,使填充后的字符串长度超过了目标长度,则只保留最左侧的部分,其他部分会被截断(截断的是填充的字符串部分)。此参数的缺省值为 " "
- 返回值:在原字符串开头填充指定的填充字符串直到目标长度所形成的新字符串
String.prototype.padEnd()
- 描述:用一个字符串填充当前字符串的末尾(如果需要的话则重复填充)
- 语法:
str.padEnd(targetLength [, padString])
- 参数
- targetLength:当前字符串需要填充到的目标长度,如果这个数值小于当前字符串的长度,则返回当前字符串本身
- padString:填充字符串。如果字符串太长,使填充后的字符串长度超过了目标长度,则只保留最左侧的部分,其他部分会被截断。此参数的缺省值为 " "
- 返回值:在原字符串末尾填充指定的填充字符串直到目标长度所形成的新字符串
String.prototype.repeat()
- 描述:用一个字符串填充当前字符串的末尾(如果需要的话则重复填充)
- 语法:
str.repeat(count)
- 参数
- count:介于 0 和 +Infinity 之间的整数。表示在新构造的字符串中重复了多少遍原字符串
- 返回值:包含指定字符串的指定数量副本的新字符串
String.prototype.replace()
- 描述:返回一个由替换值(replacement)替换部分或所有的模式(pattern)匹配项后的新字符串
- 语法:
str.replace(regexp|substr, newSubStr|function)
- 参数
- regexp (pattern):一个RegExp 对象或者其字面量。该正则所匹配的内容会被第二个参数的返回值替换掉
- substr (pattern):一个将被 newSubStr 替换的 字符串。其被视为一整个字符串,而不是一个正则表达式。仅第一个匹配项会被替换。
- newSubStr (replacement):用于替换掉第一个参数在原字符串中的匹配部分的字符串。该字符串中可以内插一些特殊的变量名
- function (replacement):一个用来创建新子字符串的函数,该函数的返回值将替换掉第一个参数匹配到的结果
- 返回值:一个部分或全部匹配由替代模式所取代的新的字符串
String.prototype.search()
- 描述:执行正则表达式和 String 对象之间的一个搜索匹配
- 语法:
str.search(regexp)
- 参数
- regexp:一个正则表达式对象
- 如果传入一个非正则表达式对象,则会使用 new RegExp(regexp) 隐式地将其转换为正则表达式对象
- regexp:一个正则表达式对象
- 返回值:如果匹配成功,则
search()
返回正则表达式在字符串中首次匹配项的索引;否则,返回-1
String.prototype.slice()
- 描述:提取某个字符串的一部分,并返回一个新的字符串,且不会改动原字符串
- 语法:
str.slice(beginIndex[, endIndex])
- 参数
- beginIndex:从该索引(以 0 为基数)处开始提取原字符串中的字符
- 如果值为负数,会被当做 strLength + beginIndex 看待,这里的strLength 是字符串的长度
- endIndex(可选):在该索引(以 0 为基数)处结束提取字符串
- 如果省略该参数,slice() 会一直提取到字符串末尾
- 如果该参数为负数,则被看作是 strLength + endIndex
- beginIndex:从该索引(以 0 为基数)处开始提取原字符串中的字符
- 返回值:返回一个从原字符串中提取出来的新字符串
String.prototype.split()
- 描述:使用指定的分隔符字符串将一个String对象分割成子字符串数组
- 语法:
str.split([separator[, limit]])
- 参数
- separator:指定表示每个拆分应发生的点的字符串
- 可以是一个字符串或正则表达式
- 如果纯文本分隔符包含多个字符,则必须找到整个字符串来表示分割点
- limit(可选):一个整数,限定返回的分割片段数量
- separator:指定表示每个拆分应发生的点的字符串
- 返回值:返回源字符串以分隔符出现位置分隔而成的一个 Array
- 如果在str中省略或不出现分隔符,则返回的数组包含一个由整个字符串组成的元素
- 如果分隔符为空字符串,则将str原字符串中每个字符的数组形式返回。
String.prototype.substring()
- 描述:返回一个字符串在开始索引到结束索引之间的一个子集, 或从开始索引直到字符串的末尾的一个子集
- 语法:
str.substring(indexStart[, indexEnd])
- 参数
- indexStart:需要截取的第一个字符的索引,该索引位置的字符作为返回的字符串的首字母
- indexEnd(可选):一个 0 到字符串长度之间的整数,以该数字为索引的字符不包含在截取的字符串内
- 返回值:包含给定字符串的指定部分的新字符串
String.prototype.toLowerCase()
- 描述:将调用该方法的字符串值转为小写形式(如果调用该方法的值不是字符串类型会被强制转换)
- 语法:` str.toLowerCase()
- 返回值:一个新的字符串,表示为将调用该方法的字符串转为小写形式
String.prototype.toUpperCase()
- 描述:将调用该方法的字符串转为大写形式并返回(如果调用该方法的值不是字符串类型会被强制转换)
- 语法:` str.toUpperCase()
- 返回值:一个新的字符串,表示为将调用该方法的字符串转为大写形式
String.prototype.toLocaleLowerCase()
- 描述:根据本地主机语言环境把字符串转换为小写格式
- 语法:
str.toLocaleLowerCase([locale, locale, ...])
- 参数
- locale(可选):指明要转换成小写格式的特定语言区域。
- 如果以一个数组 Array形式给出多个locales, 最合适的地区将被选出来应用
- 默认的 locale 是主机环境的当前区域(locale)设置。
- locale(可选):指明要转换成小写格式的特定语言区域。
- 返回值:根据任何特定于语言环境的案例映射规则将被调用字串转换成小写格式的一个新字符串
String.prototype.toLocaleUpperCase()
- 描述:根据本地主机语言环境把字符串转换为大写格式
- 语法:
str.toLocaleUpperCase([locale, locale, ...])
- 参数
- locale(可选):指明要转换成小写格式的特定语言区域。
- 如果以一个数组 Array形式给出多个locales, 最合适的地区将被选出来应用
- 默认的 locale 是主机环境的当前区域(locale)设置。
- locale(可选):指明要转换成小写格式的特定语言区域。
- 返回值:根据任何特定于语言环境的案例映射规则将被调用字串转换成大写格式的一个新字符串
String.prototype.toString()
- 描述:返回指定对象的字符串形式
- 语法:
str.toString()
- 返回值:一个表示调用对象的字符串
String.prototype.trim()
- 描述:从一个字符串的两端删除空白字符。在这个上下文中的空白字符是所有的空白字符 (space, tab, no-break space 等) 以及所有行终止符字符(如 LF,CR等)
- 语法:
str.trim()
- 返回值:一个代表调用字符串两端去掉空白的新字符串
String.prototype.trimStart()
- 描述:从一个字符串的末端移除空白字符。trimLeft() 是这个方法的别名
- 语法:
str.trimStart() / str.trimLeft();
- 返回值:一个新字符串,表示从其开头(左端)除去空格的调用字符串
String.prototype.trimEnd()
- 描述:从字符串的开头删除空格。trimLeft() 是此方法的别名
- 语法:
str.trimEnd() / str.trimRight();
- 返回值:一个新字符串,表示从调用字串的末(右)端除去空白
String.prototype.valueOf()
- 描述:返回 String 对象的原始值
- 语法:
str.valueOf()