JS中的String总结
JS中的String
普通字符串
- 使用字面量直接赋值,使用引号(
js
中不区分单双引号)将字符括起来直接赋值给一个变量,该变量就是一个字符串类型的实例
var str1 = 'a'
var str1 = 'string text'
var str2 = "string text"
var str3 = `string text`
var str4 = "中文 español deutsch English हिन्दी العربية português বাংলা русский 日本語 ਪੰਜਾਬੀ 한국어 தமிழ் עברית"
- 使用
String()
将其他值转换为字符串
var str String(thing) //thing为任何可被转换为字符串的值
模版字符串
用反引号(`)括起来的字符串也被称为模板字符串,在模板字符串可以很自然地将变量转为字符串实现拼接。模板字符串中的变量写在${}
里。
var name = '小明'
var info = '你好'
var str = `${name}说:"${info}"`
长字符串
有时,你的代码可能含有很长的字符串。你可能想将这样的字符串写成多行,而不是让这一行无限延长或着被编辑器折叠。有两种方法可以做到这一点。
- 可以使用 + 运算符将多个字符串连接起来
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.";
常用静态方法
String.fromCharCode()
String.fromCharCode()
方法返回使用指定的Unicode
值序列创建的字符串。
语法
String.fromCharCode(num1[, ...[, numN]])
参数
num1, ..., numN
一组序列数字,表示 Unicode 值。
返回值
包含与Unicode值序列对应的字符的字符串。
示例
var str = String.fromCharCode(65, 66, 67); // str=="ABC"
String.raw
String.raw()
是一个模板字符串
的标签函数,是用来获取一个模板字符串的原始字面量值的。
标签式语法
String.raw`templateString`
像所有的标签函数一样,你通常不需要把它看成一个普通函数,你只需要把它放在模板字符串前面就可以了,而不是在它后面加个括号和一堆参数来调用它,引擎会替你去调用它。
返回字符串原始字面量所表示的字符串
示例
String.raw`Hi\n${2+3}!`; // '\'和'n'是两个字符 “Hi\n${2+3}!”
let name = 'Bob';
String.raw`Hi\n${name}!`; //"Hi\nBob!"
函数式语法
String.raw(callSite, ...substitutions)
参数
-
callSite
一个模板字符串的“调用点对象”。类似{ raw: ['foo', 'bar', 'baz'] }
。 -
...substitutions
任意个可选的参数,表示任意个内插表达式对应的值。
返回值
返回将...substitutions
顺序插入callSite.raw
中的原始字面量所表示的字符串。
String.raw({ raw: 'test' }, 0, 1, 2); // 't0e1s2t'
// 相当于`t${0}e${1}s${2}t`,但转义语法失效String.raw({raw: ['foo', 'bar', 'baz']
}, 2 + 3, 'Java' + 'Script'); // 'foo5barJavaScriptbaz'
//相当于`foo${2 + 3}bar${'Java' + 'Script'}baz`,但转义语法失效
常用实例方法/属性
基础
length
返回字符串长度。
toString()
返回指定对象的字符串形式。
valueOf()
返回一个String
对象的原始值。
通过new
关键字指定字符串字面量创建的String
对象会开辟一个新内存空间,在严格比较下与指定的字符串字面量不相等,通过valueOf
可获取该String
对象的原始字符串字面量。
var str1 = 'abc123';
var str2 = new String('abc123');
console.log(str1==str2); //true,宽松比较会进行类型转换
console.log(str1===str2); //false,严格比较不进行类型转换,直接比较内存存储的值
console.log(str1===str2.valueOf()); //true valueOf()返回str2的原始字面值,即'abc123',它与str1相等
trim()
trim()
方法返回此字符串删除两端空白字符后的字符串。在这个上下文中的空白字符是所有的空白字符 (space, tab, no-break space 等) 以及所有行终止符字符(如 LF,CR)。方法不改变原字符串。
原型
str.trim()
查找
charAt()与charCodeAt()
charAt()原型
str.charAt(index);
参数
index
,一个介于0 和字符串长度减1之间的整数。若参数数值或没有提供参数,则默认参数为0。
返回值
指定字符串索引处的字符; 如果index
超出范围,则为空字符串
charCodeAt()原型
str.charCodeAt(index)
参数
index
,一个大于等于 0,小于字符串长度的整数。若参数数值或没有提供参数,则默认参数为0。
返回值
- 一个表示给定索引处字符的 UTF-16 代码单元值的数字;如果索引超出范围,则返回
NaN
。
startsWith()与endWith()
startsWith()
方法用来判断当前字符串是否是以一个给定的子字符串**“开头”**的,
endWith()
方法用来判断当前字符串是否是以一个给定的子字符串**“结尾”**的,两方法都根据判断结果返回true
或false
。
原型
str.startsWith(searchString[, position])
str.endWith(searchString[, position])
参数
searchString
要搜索的子字符串。position
在 str 中搜索searchString
的结束位置,默认值为str.length
,也就是真正的字符串结尾处。
返回值
- 如果给定的字符在
string
头部/尾部找到,返回true
否则返回false
indexOf()与lastIndexOf()
indexOf()
方法从前往后找,返回此 String
对象中第一次出现的指定值的索引,lastIndexOf()
方法从后往前找,返回此 String
对象中最后一次出现的指定值的索引,可指定开始索引。
原型
str.indexOf(searchValue[, fromIndex])
str.lastIndexOf(searchValue[, fromIndex])
参数
-
searchValue
,一个字符串表示被查找的值。 -
fromIndex
,可选,表示调用该方法的字符串中开始查找的位置。可以是任意整数。默认值为 0。如果fromIndex < 0
则查找整个字符串(如同传进了 0)。
返回值
-
被查找的字符串是一个空字符串,此时返回 0
-
fromIndex >= str.length
,或没有找到指定字符串,返回 -1 -
指定值的第一次/最后一次出现的索引
includes()
includes()
方法用于判断一个字符串是否包含在另一个字符串中,根据情况返回true
或false
。
原型
str.includes(searchString[, position])
参数
-
searchString
要在此字符串中搜索的字符串。 -
position
可选。指定起始搜索索引,默认值为0。
返回值
如果当前字符串包含被搜寻的字符串,就返回true;否则,返回false。
search()
search()
方法执行正则表达式和 String
对象之间的一个搜索匹配,返回第一个匹配到的索引。
str.search(regexp)
参数
regexp
,一个**正则表达式(regular expression)**对象。如果传入一个非正则表达式对象,则会使用new RegExp(obj)
隐式地将其转换为正则表达式对象。
返回值
- 如果匹配成功,则
search()
返回正则表达式在字符串中首次匹配项的索引。否则,返回 -1。
match()
当一个字符串与一个正则表达式匹配时, match()
方法检索匹配项。
原型
str.match(regexp)
参数
regexp
,一个正则表达式对象。如果传入一个非正则表达式对象,则会隐式地使用new RegExp(obj)
将其转换为一个RegExp
。
返回值
-
如果你未提供任何参数,直接使用
match()
,那么你会得到一个包含空字符串的Array
:[“”] 。 -
array
如果字符串匹配到了表达式,会返回一个数组,数组的第一项是进行匹配完整的字符串,之后的项是用圆括号捕获的结果。如果没有匹配到,返回null
。
操作
toLowerCase()与toUpperCase()
toLowerCase()
将原字符串中所有大写字母转换为小写并返回,
toLowerCase()
将原字符串中所有小写字母转换为大写并返回。
两方法都不改变原字符串。
str.toLowerCase()
str.toUpperCase()
padStart()与padEnd()
padStart()
方法用另一个字符串填充当前字符串(重复,如果需要的话),以便产生的字符串达到给定的长度。从当前字符串的头部(左侧)开始填充。
padEnd()
方法会用一个字符串填充当前字符串(如果需要的话则重复填充),返回填充后达到指定长度的字符串。从当前字符串的末尾(右侧)开始填充。
str.padStart(targetLength [, padString])
str.padEnd(targetLength [, padString])
参数
targetLength
当前字符串需要填充到的目标长度。padString
可选填充字符串,默认为空格。
返回值
- 如果
targetLength
小于当前字符串的长度,则返回当前字符串本身。 - 如果字符串太长,使填充后的字符串长度超过了目标长度,则只保留最左侧的部分,其他部分会被截断。
- 在原字符串末尾填充指定的填充字符串直到目标长度所形成的新字符串。
例
'abc'.padStart(10); // " abc"
'abc'.padStart(10, "foo"); // "foofoofabc"
'abc'.padStart(6,"123465"); // "123abc"
'abc'.padStart(8, "0"); // "00000abc"
'abc'.padStart(1); // "abc"'abc'.padEnd(10); // "abc "
'abc'.padEnd(10,"foo"); // "abcfoofoof"
'abc'.padEnd(6,"123456"); // "abc123"
'abc'.padEnd(1); // "abc"
substr()和substring()与slice()
subStr()
方法通过指定开始索引和数量截取原字符串返回。
substring()
方法通过指定开始索引和结束索引(不包括)截取原字符串返回。
str.substr(indexStart[,size])
str.subString(start[,end])
str.slice(beginSlice[, endSlice])
参数
-
substr():
-
indexStart
,开始提取字符的位置。如果为负值,则被看作strLength + indexStart,
其中strLength
为原字符串的长度(例如,如果indexStart
为-3,则被看作strLength -3
,此时从后往前截取。 -
size
,可选。提取的字符数。默认为strLength
(原字符串长度),若小于0则被当作0。
-
-
substring():
-
start
,一个 0 到字符串长度之间的整数。 -
end
,可选。一个 0 到字符串长度之间的整数。需大于等于start
。默认为strLength
(原字符串长度)
-
-
slice():
-
beginSlice
,起始截取索引。如果值为负数,会被当做sourceLength + start
看待,这里的sourceLength 是字符串的长度
(例如, 如果start
是 -3 则看作是:sourceLength - 3
) -
endSlice
,可选。结束截取索引。如果省略该参数,slice
会一直提取到字符串末尾。如果该参数为负数,则被看作是sourceLength + end
,这里的sourceLength
就是字符串的长度(例如,如果end
是 -3,则是,sourceLength - 3
)。
-
返回值
截取的原字符串。
注意:
substr()
indexStart
小于0,表示从后往前数的序数。size
小于0,被当作0。
substring()
-
如果任一参数小于 0 或为
NaN
,则被当作 0。 -
如果任一参数大于
stringName.length
,则被当作stringName.length
。
- 如果
indexStart
大于indexEnd
,则substring
的执行效果就像两个参数调换了一样。例如,str.substring(1, 0) ==
str.substring(0, 1)
。
slice()
beginSlice
大于等于endSlice
时,返回空串。- 参数为负,表示从后往前数的序数。
split()
split()
方法使用指定的分隔符字符串将一个String
对象分割成字符串数组。
原型
str.split([separator[, limit]])
参数
-
separator
,指定表示每个拆分应发生的点的字符串。separator
可以是一个字符串或正则表达式
。- 如果纯文本分隔符包含多个字符,则必须找到整个字符串来表示分割点。
- 如果在str中省略或不出现分隔符,则返回的数组包含一个由整个字符串组成的元素。
- 如果分隔符为空字符串,则将str原字符串中每个字符的数组形式返回。
-
limit
,一个整数,限定返回的分割片段数量。当提供此参数时,split()
方法会在指定分隔符的每次出现时分割该字符串,但在限制条目已放入数组时停止。
返回值
- 在给定字符串中出现分隔符的每个点处拆分的字符串数组。
concat()
concat()
方法将一个或多个字符串与原字符串连接合并,形成一个新的字符串并返回。
原型
str.concat(string2[, string3, ..., stringN])
参数
string2...stringN
和原字符串连接的多个字符串
返回值
- 此字符串与所有参数
string
连接成的新的string
注:concat
方法返回一个新字符串,并不影响原字符串。
repeat()
repeat()
构造并返回一个新字符串,该字符串为原字符串重复指定数量后的字符串副本。原字符串不变。
原型
str.repeat(count);
参数
count
,正整数,表示在新构造的字符串中重复了多少遍原字符串。
返回值
- 包含指定字符串的指定数量副本的新字符串。
异常
-
RangeError
: 重复次数不能为负数。 -
RangeError
: 重复次数必须小于infinity
,且长度不会大于最长的字符串。
replace()
replace()
方法返回一个由替换值替换一些或所有匹配的模式后的新字符串。模式可以是一个字符串或者一个正则表达式 ,替换的新值可以是一个字符串或者一个每次匹配都要调用的函数。原字符串不变。
原型
str.replace(regexp|substr, newSubstr|function)
参数
-
regexp
,一个正则表达式RegExp
对象或者其字面量。该正则所匹配的内容会被第二个参数的返回值替换掉。 -
substr
待替换的字符串。其被视为一整个字符串,而不是一个正则表达式。仅仅是第一个匹配会被替换。 -
newSubStr
,用于替换掉第一个参数在原字符串中的匹配部分的字符串。该字符串中可以内插一些特殊的变量名。 -
function
一个用来创建新子字符串的函数,该函数的返回值将作为替换的新值。
**注:**在进行全局的搜索替换时,正则表达式需包含 g 标志。
返回值
- 一个部分或全部匹配由替代模式所取代的新的字符串。