String数据类型

任何字符串的长度都可以通过访问其length属性取得,例如

var text="aaa";
alert(text.length);   //3

要把一个值转换为字符串有两种方式:

  1. toString()方法:数值,布尔值,对象,和字符串值都有toString()方法,但是null和undefined值没有这个方法。
    多数情况下,调用toString()方法不必传递参数,但是,在调用数值的toString()方法时,可以传递一个参数:输出数值的基数,默认情况下,toString()方法以十进制格式返回数值的字符串表示。而通过传递基数,toString()可以输出以二进制,八进制,十六进制,乃至其他任意有效进制表示的字符串值。
  2. 在不知道要转换的值是不是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. 获取字符串指定位置的值
    (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. 检查字符串是否包含特定序列。
    (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
  1. 连接多个字符串
    concat()方法用于连接两个或多个字符串。该方法不会改变原有字符串,会返回连接两个或多个字符串的新字符串。用法如下:
let str='abc';
console.log(str.contact"efg"));    //输出结果:"abcefg"
console.log(str.concat("efg","hijk");    //输出结果为:"abcefghijk"
  1. 字符串分割成数组
    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. 截取字符串
    (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. 字符串大小写转换
    (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. 字符串模式匹配
    (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
  1. 移除字符串首尾空白符
    空白符包括:空格,制表符tab,换行符等
    (1)trim():从原始字符串的删除首尾的空白字符,该方法不适用于null ,undefined,Number类型。
    (2)trimStart():从原始字符串的开头删除首尾的空白字符。
    (3)trimEnd():从原始字符串的末尾删除首尾的空白字符。
const s='  abc  ';
s.trim();   //输出'abc';
s.trimStart();    //输出'abc  ';
s.trimEnd();    //输出'  abc';
  1. 重复一个字符串
    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'
  1. 补齐字符串长度
    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'
  1. 字符串转为数字
    parseInt()和parseFloat()都将字符串转为数字。
  • 只有字符串中的第一个数字会被返回,当遇到第一个不是数字的字符为止。
  • 如果字符串的第一个字符不能转换为数字,就会返回NaN。