JavaScript 之 字符串的方法和属性汇总

324 阅读6分钟

前言:

JavaScript中字符串是一种基本数据类型;在日常的开发中,使用的可以说最多的类型; 有必要对它的属性和方法有个整体全面的熟悉,方便平时使用。

1. 属性:length

返回字符串的长度

let str1 = new String('Hello  world')
console.log(str1.length); // 12
let str2 = 'ni  hao';
console.log(str2.length);

2. 方法一:charAt() 和charCodeAt();

let str3 = 'helloBeijing';
// 测试chartAt()方法
console.log(str3.charAt(1)); // e
console.log(str3.charAt(2)); // l
console.log(str3.charAt(5)); // B
// 总结:字符串使用charAt()方法,传索引,得相应的字符

// 测试charCodeAt()方法
console.log(str3.charCodeAt(0));// 104
console.log(str3.charCodeAt(1));// 101
console.log(str3.charCodeAt(5));// 66
// 总结:使用  charCodeAt() ,传索引,返回对应字符的  ASCII编码值

console.log(str3[5]); // B ,字符串也可以像数组那样使用索引的方式找相应的字符

3. 字符串操作方法:concat()、slice()、substr()、substring()

1)测试concat()方法

let str1 = 'hello';
let res1 = str1.concat('world')
console.log(res1); // helloworld
console.log(str1); // hello
// 总结:concat()进行字符串拼接;不改变原字符串

2)测试slice(startIndex,[lastIndex]) 方法;

// 参数:开始下标,结束下标(可选)
let str2 = 'helloWorld';
console.log(str2.slice(2));// lloWorld
console.log(str2.slice(2,6));// lloW
console.log(str2); // helloWorld
// 总结:slice() 方法具有截取功能:第一个参数是截取的起始索引位置;第二个参数是终止索引位置,
//       并且,第二个参数可选;但是不包含最后索引位置的的字符;同时,它不改变原字符串。

3)测试substr(startIndex,[lastIndex]) 方法

// 参数:开始下标,结束下标(可选)
let str3 = 'hello北京';
console.log(str3.substr(1)); // ello北京
console.log(str3.substr(1,2)); // el
console.log(str3.substr(1,6)); // ello北京
console.log(str3); // hello北京
// 总结:substr()方法截取原字符串片段;第一个参数是截取的起始索引位置;的第二个参数指定的则
// 是返回的字符个数, 第二个参数可选;第二个参数不写,则到最后一个。同时不改变原字符串

4)测试substring(startIndex,[lastIndex])方法

// 参数:开始下标,结束下标(可选)
let str4 = 'hello world';
console.log(str4.substring(1)); // ello world
console.log(str4.substring(1,7)); // ello w
console.log(str4); // hello world
// 总结:substring()具有截取字符串功能:第一个参数是起始位置,第二个参数是终止位置,
//      但是终止位置对应的字符串不包含;不改变原来的字符串

几种方法对比:

console.log(str5.slice(-3)); // rld
console.log(str5.substr(-3)); // rld
console.log(str5.substring(-3)); //hello world
console.log(str5.slice(3,-4)); // lo w
console.log(str5.substr(3,-4)); // ''空字符串
console.log(str5.substring(3,-4)); // hel

这三个方法都返回被操作字符串的一个字符串,而且也接受一个或两个参数,当接受两个参数时,不包含结束下标,第一个参数指定字符串的起始位置,第二个参数(在指定的情况下)表示子字符串到哪里结束,具体来说,slice()和substring()的第二个参数指定的是字符串最后一个字符后面的位置,而substr()的第二个参数指定的则是返回的字符个数。如果没有给这些方法指定第二个参数,则将字符串的末尾作为结束位置。

在传递这些方法的参数是负值的情况下,它们的行为就不尽相同了,其中slice()方法会将传入的负值与字符串长度相加,substr()方法将负的第一个参数加上字符串的长度,而将负的第二个参数转换为0。最后,substring()方法会将所有负值参数转换为0。

5)字符串位置方法 indexOf() 和 lastIndexOf()

let str = 'hello world';
// 1:测试indexOf() 方法
console.log(str.indexOf('o'));// 4
console.log(str.indexOf('o',5));// 7
console.log(str.indexOf('o',6));// 7
console.log(str.indexOf('a'));// -1

// 2:测试lastIndexOf()方法
console.log(str.lastIndexOf('o')); // 7
console.log(str.lastIndexOf('a')); // -1
console.log(str.lastIndexOf('o' ,6)); // 4
console.log(str.lastIndexOf('o' ,5)); // 4

// 总结:indexOf()查询字符串指定字符的所在位置,如果有,则返回字符的具体所有位置,大于等于0的;
//      如果没有则返回-1;第二参数,是从指定位置开始往后算;而lastIndexOf()是从右往左推算。

let long = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit';
let positions = new Array();
console.log(positions);
let pos = long.indexOf('e')
console.log(pos);
while(pos > 1){
    positions.push(pos);
    pos = long.indexOf('e',pos+1)
}
console.log(positions); //[ 3, 24, 32, 35, 52 ]

6)trim()方法

let str = '     hello  world     ';
console.log(str);//      hello  world  
console.log(str.trim());//hello  world
// 总结:该方法去掉字符串头尾两边的空格

7)字符串大小写转换方法:toLowerCase() 和 toUpperCase()

let str = 'Hello World';
console.log(str.toLowerCase());  // hello world
console.log(str.toUpperCase()); //HELLO WORLD
console.log(str.toLocaleLowerCase()); //hello world
console.log(str.toLocaleUpperCase());//HELLO WORLD
// 总结:两组都是给字符串转换大小写的,加了'Locale'的是针对世界上有些地区的。

8)字符串的模式匹配方法 split()、match()、replace()、search()

// 1:测试match()方法
let text = 'cat, bat, sat, fat';
let pattern =  /.at/;
let matches = text.match(pattern)
console.log(matches);
console.log(matches.index);//0
console.log(matches[0]);//cat
console.log(pattern.lastIndex);//0

// 2:测试search()方法
let text1 = 'cat, bat, sat, fat';
let pos = text1.search(/at/)
console.log(pos); //1

// 3:测试replace()方法
let text3 =  'cat, bat, sat, fat';
console.log(text3.replace('at','ond'));//cond, bat, sat, fat
console.log(text3.replace(/at/g,'ond')); //cond, bond, sond, fond

// 4:测试split()方法
let text4 = 'red,blue,green,yellow';
let color1 = text4.split(',')
let color2 = text4.split(',',2)
console.log(color1); //[ 'red', 'blue', 'green', 'yellow' ]
console.log(color2);//[ 'red', 'blue' ]
// 总结:split()方法的第一个参数是字符串或正则表达式;第二可选,该参数指定返回数组的最大长度。

match()方法本质上与调用RegExp的exec()方法相同,match()方法只接受一个参数,要么是一个正则表达式,要么是一个RegExp对象。

search()方法与match()方法的参数相同,有字符串或RegExp对象指定的一个正则表达式,search()方法返回字符串中第一个匹配项的索引,如果没有找到匹配项,则返回-1,而且,search()方法始终从字符串开头向后匹配查找模式。

replace()方法接收两个参数,第一个参数可以是一个RegExp对象或者一个字符串(这个字符串不会被转换成正则表达式),第二个参数可以可以是一个字符串或者一个函数。如果第一个参数是字符串,那么只会替换第一个子字符串。要想替换所有子字符串,唯一的方法就是提供一个正则表达式,而且要指定全局(g)标志。

split()方法可以基于指定的分隔符将一个字符串分割成多少个字符串,并将结果放在数组中。分隔符可以是字符串,也可以是一个RegExp对象(这个方法不会将字符串看成正则表达式)。split()方法可以接受可选的第二个参数,用于指定数组的大小,以确保返回的数组不会超过既定大小。

4. 把其他类型转化成字符串(toString(),String())

// toString():除了null 和 undefined之外, 其他类型(数值、布尔、字符串、对象)都有此方法,
// 它返回相应值的字符串表现(并不修改原变量)
let age = 18;
let ageString = age.toString();
console.log(ageString); //18
console.log(typeof ageString); //string

let found = true;
let foundString = found.toString();
console.log(foundString);//true
console.log(typeof foundString);//string

let arr = [1,3,'a'];
let arrString = arr.toString()
console.log(arrString); //1,3,a
console.log(typeof arrString);//string

String() :  在不知道要转换的值是不是null和undefined情况下,还可以用String(),String()能够将任何类型的数值转换成string类型,String()遵循以下原则:

   1.如果只有toString()方法,则调用toString()方法并返回相应的结果;

   2.如果值为null,则返回"null";

   3.如果值为undefined,则返回 "undefined"