String数据类型
任何字符串的长度都可以通过访问其length属性取得,例如
var text="aaa";
alert(text.length); //3
要把一个值转换为字符串有两种方式:
- toString()方法:数值,布尔值,对象,和字符串值都有toString()方法,但是null和undefined值没有这个方法。
多数情况下,调用toString()方法不必传递参数,但是,在调用数值的toString()方法时,可以传递一个参数:输出数值的基数,默认情况下,toString()方法以十进制格式返回数值的字符串表示。而通过传递基数,toString()可以输出以二进制,八进制,十六进制,乃至其他任意有效进制表示的字符串值。 - 在不知道要转换的值是不是null或undefined的情况下,还可以使用转型函数String(),这个函数能够将任何类型的值转换为字符串。String()函数遵循下列转换规则:
- 如果值有toString()方法,则调用该方法并返回相应的结果;
- 如果值是null,则返回‘null’;
- 如果值是undefined,则返回‘undefined’.
var value1=10;
var value2=true;
var value3=null;
var value4;
alert(String(value1)); //"10"
alert(String(value2)); //"1"
alert(String(value3)); //"null"
alert(String(value4)); //"undefined"
String方法
- 获取字符串指定位置的值
(1)charAt()方法获取到的是指定位置的字符
const str='hello';
str.charAt(1) //输出结果e
字符串也可以通过索引值来直接获取对应字符,区别是,当index的取值不在str的长度范围时,str[index]会返回undefined,而charAt(index)返回空字符串。
const str='abcdf';
str[1] //输出结果为b
str.charAt(1) //输出结果b
str[6]; //输出结果为undefined
str.charAt(6) //输出结果为“ ”
(2)charCodeAt()
该方法会返回索引位置字符的Unicode值。如果指定位置没有字符,将返回NaN;
let str='abcdefg';
charCodeAt(1); //输出98
- 检查字符串是否包含特定序列。
(1)indexOf():查找某个字符,【有则返回第一次匹配到的位置】,否则返回-1.
string.indexOf(需检索的字符串值,规定在字符串开始检索的位置)
注:若开始检索的位置省略,则从字符串的首字符开始检索。
let str = "abcdefgabc";
console.log(str.indexOf("a")); // 输出结果:0
console.log(str.indexOf("z")); // 输出结果:-1
console.log(str.indexOf("c", 4)) // 输出结果:9
(2)lastIndexOf():查找某个字符,有则返回最后一次匹配到的位置,否则返回-1.
let str='abcabc';
console.log(str.lastIndexOf("a")); //输出结果为3
console.log(str.lastIndeOf("z"));
(3)includes():该方法用于判断字符串是否包含指定的子字符串。如果找到匹配的字符串则返回true,否则返回false。该方法的语法如下:
string.includes(要查找的字符串(必须),start(可选,设置从那个位置开始查找,默认为0));
str='Hello world';
str.includes('o'); //输出结果:true
str.includes('z'); //输出结果:false
str.includes('e',2); //输出结果为:false
(4)startsWith():该方法用于检测字符串【是否以指定的字符串开始】。如果是以指定的字符开始,返回true,否则返回false.其语法和上面的includes()方法一样。
let str='hello world'
str.startsWith('hello')//输出结果:true
str.startsWith('helle')//输出结果:false
str.startswith('wo',6) //输出结果为:true
(5)endsWith():该方法用来判断当前字符串【是否是以指定的子字符串结尾】。如果传入的子字符串在搜索字符串的末尾则返回true,否则返回false。其语法如下:
string.endsWith(要搜索的子字符串(必须),默认为原始字符串的长度)
let str='Hello world';
str.endsWith('!'); //输出结果:true
str.endsWith('llo'); //输出结果:false
str.endsWith('llo',5); //输出结果:true
- 连接多个字符串
concat()方法用于连接两个或多个字符串。该方法不会改变原有字符串,会返回连接两个或多个字符串的新字符串。用法如下:
let str='abc';
console.log(str.contact"efg")); //输出结果:"abcefg"
console.log(str.concat("efg","hijk"); //输出结果为:"abcefghijk"
- 字符串分割成数组
split()方法用于把一个字符串分割成字符串数组。该方法不会改变原始字符串。其语法如下:
string.split(字符串或正则表达式(从该参数指定的地方分割string),指定返回的数组的最大长度(如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度))
let str='abcdef';
str.split("c"); //输出结果:["ab","def"]
str.split("",4) //输出结果:['a','b','c','d']
如果把空字符串用作separator,那么字符串中的每个字符之间都会被分割。
str.split(" ");//输出结果为["a","b","c","d","e","f"]
其实在将字符串分割成数组时,可以同时拆分多个分割符,使用正则表达式即可实现:
const list="apples,bananas;cherries"
const fruits=list.split(/[,;]/)
console.log(fruits); //输出结果:["apples","bananas","cherries"]
- 截取字符串
(1)slice():该方法用于提取字符串的某个部分,并以新的字符串返回被提取的部分。其语法如下:
string.slice(start,end)
该方法有两个参数:
start:必须。要截取片段的起始下标,第一个字符位置为0。如果为负数,则从尾部开始截取。
end:可选。要截取的片段结尾的下标。若未指定此参数,则要提取的子串包括start到原字符串结尾的字符串。如果该参数是负数,那么它规定的是从字符串尾部开始算起的位置。(-1指字符串最后一个字符,-2指倒数第二个字符)
let str="abcdefg";
str.slice(1,6); //输出结果为"bcdef"
str.slice(1); //输出结果为"bcdefg"
str.slice(); //输出结果为"abcdefg"
str.slice(-2); //输出结果为"fg"
str.slice(6,1); //输出结果为"
(2)substr():用于在字符串中抽取从开始下标开始的指定数目的字符。
string.substr(start,length)
该方法有两个参数:
start:必需 。要抽取的字串的起始下标。必须是数值。如果是负数,那么该参数声明从字符串的尾部开始算起的位置。也就是说-1指字符串中最后一个字符,-2指倒数第二个字符,以此类推。
length:可选。要抽取的字符的数目,如果省略,那么返回从开始到末尾的子串。
let str='abcdefg';
str.substr(1,6); //输出结果:"bcdefg"
str.substr(1); //输出结果:"bcdefg"
str.substr(); //输出结果:"abcdefg"
str.substr(-1); //输出结果:"g"
(3)substring():用于提取字符串中介于两个指定下标之间的字符。其语法如下:
string.substring(from,to)
该方法有两个参数:
from:必需。一个非负的整数,规定要提取的子串的第一个字符在string的位置。
to:可选。若省略返回的子串会一直到字符串的结尾。
注意:如果参数from和to相等,那么该方法返回的是空串, 如果from比to大,那么该方法会在提取字串之前交换两个参数。该方法返回的子串包括开始处的字符,但不包括结束处的字符
let str = "abcdefg";
str.substring(1,6); // 输出结果:"bcdef" [1,6)
str.substring(1); // 输出结果:"bcdefg" [1,str.length-1]
str.substring(); // 输出结果:"abcdefg" [0,str.length-1]
str.substring(6,1); // 输出结果 "bcdef" [1,6)
str.substring(-1); // 输出结果:"abcdefg"
- 字符串大小写转换
(1)toLowerCase:该方法用于把字符串转换成小写。
(2)toUpperCase:该方法用于把字符串转换成大写。
let str="abSDJij";
str.toLowerCase();//输出结果为:absdjij
str.toUpperCase();//输出结果为:ABSDIJ
可以将字符串中第一个字母变成大写:
let word='apple';
word=word[0].toUpperCase()+word.substr(1)
console.log(word)//输出结果为“Apple”
- 字符串模式匹配
(1)replace():该方法用于在字符串中用一些字符替换另一些字符。
let str='abcdef';
str.replace('c','z') //输出结果为:'abzdef'
执行一个全局替换,忽略大小写:
let str="Mr Blue has a blue house and a blue car";
str.replace(/blue/gi, "red"); // 输出结果:'Mr red has a red house and a red car'
若不设置替换全局,那么replace将只替换第一个匹配子串
(2)match():该方法用于在字符串中检索指定的值,返回指定的值。
let str = "abcdef";
console.log(str.match("c")) // ["c", index: 2, input: "abcdef", groups: undefined]
(3)search():用于检索字符串中指定的子字符串。返回str中第一个相匹配的子串起始位置
let str='abcdef';
str.search(/bcd/) //输出结果:1
- 移除字符串首尾空白符
空白符包括:空格,制表符tab,换行符等
(1)trim():从原始字符串的删除首尾的空白字符,该方法不适用于null ,undefined,Number类型。
(2)trimStart():从原始字符串的开头删除首尾的空白字符。
(3)trimEnd():从原始字符串的末尾删除首尾的空白字符。
const s=' abc ';
s.trim(); //输出'abc';
s.trimStart(); //输出'abc ';
s.trimEnd(); //输出' abc';
- 重复一个字符串
repeat():返回一个新字符串,表示将原字符串重复n次。
'x'.repeat(3) //输出结果"xxx"
'hello'.repeat(2) //输出结果'hellohello'
'na'.repeat(0) //输出结果:''
如果参数是小数,会向下取整:
'na'.repeat(2.9) //输出结果:'nana'
'na'.repeat(Infinity) //RangeError
'na'.repeat(-1) //RangeError
'na'.repeat(-0.9) //输出结果:' '
'na'.repeat(NaN) //输出结果:' '
'na'.repeat('na') //输出结果: ' '
'na'.repeat('3') //输出结果:'nanana'
- 补齐字符串长度
padStart()和padEnd()方法用于补齐字符串的长度。
padStart():用于头部补全。
如果原字符串的长度,等于或大于指定的最小长度,则返回原字符串:
'x'.padStart(1,'ab') //'x'
如果用来补全的字符串与原字符串,两者的长度之和超过了指定的最小长度,则会截去超出位数补全字符串。
'x'.padStart(5,'ab') //'ababx'
'x'.padStart(4,'ab') //'abax'
如果省略第二个参数,默认使用空格补全长度:
'x'.padStart(4) //' x'
(2)padEnd():用于尾部补全。
'x'.padEnd(5,'ab') //'xabab'
'x'.padEnd(4,'ab') //'xaba'
- 字符串转为数字
parseInt()和parseFloat()都将字符串转为数字。
- 只有字符串中的第一个数字会被返回,当遇到第一个不是数字的字符为止。
- 如果字符串的第一个字符不能转换为数字,就会返回NaN。