字符串定义及特点
字符串是由零个或多个16位Unicode字符组成的字符序列
特点
- 字符串由双引号(“)或者单引号(‘)包裹,两种写法效果相同,没有任何区别。
- 字符串一旦创建就不可更改。
var str = 'hello';
str = str + 'world';
以上代码的实现过程:先创建一个10个字符的新字符串,填充’helloworld’,并与变量str关联起来,最后销毁’hello’和’world’这两个字符串。这个过程是在后台实现的,不可见。简单的来说,创建的字符串不可更改,要改变一个变量所保存的字符串内容,只有销毁掉原先的字符串,再生成新的字符串。
其他数据类型转换成字符串
一共有三种方法:
- toString()
- String()
- 加性操作符
toString()
数据类型中除了null 和 undefined这两个没有toString()方法外,其他类型均可以使用toString()方法进行转换。特别Number类型的,可以填写需要的基数,来选择返回的字符串数据,如果不填写基数的话,默认返回的是十进制,如下代码:
var num = 12;
var num_str = num.toString(); //"12"
var num_str2 = num.toString(2); //"1100"
var num_str8 = num.toString(8); //"14"
var num_str16 = num.toString(16); //"c"
String()
任何数据类型都可以使用String()来进行数据转换,String()的转换规则是:
4. 如果值有toString()方法,则调用该方法进行转换;
5. 如果值是null,则返回’null’;
6. 如果值是undefined,则返回’undefined’;
console.log(String(null)); //'null'
console.log(String(undefined)); //'undefined'
console.log(String(123)); //'123'
加操作符
加性操作符针对至少有一个操作数是字符串的规则:
1. 如果两个操作数都是字符串的,那么直接进行拼接为新的字符串;
2. 如果一个操作数是字符串,另一个操作数是对象、数值、布尔值的调用toString()进行转换,然后拼接为新的字符串;
3. 如果一个操作数是字符串,另一个操作数是null或undefined的,调用String()进行转换,然后拼接为新的字符串
var num_str = 5 + ''; //'5'
var num_1 = 6;
var num_2 = 9;
var mess = 'this is ' + num_1 + num_2; //'this is 69'
var mess_1 = 'this is ' + (num_1 + num_2); //'this is 15'
字符串相关方法
先介绍下比较常用的方法
slice(start,end)、substring(start,end)、substr(start,len)
这三个方法返回的都是新字符串,原始字符串不会改变。
start:开始位置的下标
end:该参数可选,结束位置后面一位的下标
len:该参数可选,从开始位置开始算,返回字符的个数
如果没有写end或len参数,那么返回从start开始到字符串结束为止的新字符串
var str = 'JavaScript';
//两个参数
console.log(str.slice(2,4)); //'va'
console.log(str.substr(2,4)); //'vaSc'
console.log(str.substring(2,4)); //'va'
//一个参数
console.log(str.slice(2)); //'vaScript'
console.log(str.substr(2)); //'vaScript'
console.log(str.substring(2)); //'vaScript'
如果传入的参数是负数的话,slice()方法会把负参数和字符串的length相加;substr()方法会把第一个负参数和字符串的length相加,第二个负参数置为零;substring()方法会把所有的负参数都置为零。
var str = 'JavaScript';
//两个参数
console.log(str.slice(-5,-1)); //'crip'
console.log(str.substr(-5,-1)); //''
console.log(str.substring(-5,-1)); //''
//一个参数
console.log(str.slice(-2)); //'pt'
console.log(str.substr(-2)); //'pt'
console.log(str.substring(-2)); //'JavaScript'
从以上的例子可以看出,在不传入负参数时,slice()和substring()的返回相同,而在传入一个参数的情况下,三个方法的返回值均相同。
match()、seatch()、replace()、splite()是跟模式匹配相关的方法
match(pattern)
pattern:字符串或者正则表达式
var str = 'JavaScript';
var matchStr = str.match(/av/);
//输出的matchStr如下图所示
search(pattern)
pattern:字符串或者正则表达式
返回值是匹配项的索引,如果没有找到匹配的子字符串,则返回-1
var str = 'JavaScript';
var pos = str.search(/i/); //pos: 7
replace(arg1,arg2)
arg1: 字符串或者正则表达式
arg2: 字符串或者函数
var str = 'java,javascript';
//两个参数均是字符串
var replaceStr = str.replace('ava','ovo'); //"jovo,javascript"
//第一个参数是正则表达式
var replaceStr = str.replace(/ava/g,"ovo"); //"jovo,jovoscript"
- 第二个参数是字符串时,也可以使用一些特殊字符序列,将正则表达式得到的字符串插入到返回的新字符串中
var str = 'java,javascript';
//$'
var replaceStr = str.replace(/ava/g,"ovo($')"); //"jovo(,javascript),jovo(script)script"
//$$
var replaceStr = str.replace(/ava/g,"ovo($$)"); //"jovo($),jovo($)script"
//$&
var replaceStr = str.replace(/ava/g,"ovo($&)"); //"jovo(ava),jovo(ava)script"
//$`
var replaceStr = str.replace(/ava/g,"ovo($`)"); //"jovo(j),jovo(java,j)script"
//$n
var replaceStr = str.replace(/(.ava)/g,"ovo($1)"); //"ovo(java),ovo(java)script"
字符序列 | 替换文本 |
---|---|
$’ | 匹配的子字符串右边的子字符串 |
$` | 匹配的子字符串左边的子字符串 |
$& | 匹配的子字符串 |
$$ | $ |
$n | 匹配第n个捕获组的子字符串(n:0~9) |
注:这里的左右是用我们的视觉来看的
2.第二个参数是函数时,会向该函数传递至少三个参数:匹配项,匹配项的位置,原始字符串;
如果第一个参数定义了多个捕获组,那么在参数匹配项和匹配项的位置之间插入多个捕获组的匹配项。
var str = 'this is javascript or java';
var result = str.replace(/[jai]/g,function(match,pos,str){
switch(match){
case 'j':
return 'H';
case 'i':
return 'I';
case 'a':
return 'A';
}
});
//"thIs Is HAvAscrIpt or HAvA"
splite(pattern,size)
pattern: 字符串或者正则表达式
size: 可选参数,用于指定返回的数组中项的个数
var str = 'java,php,phython,javascript';
var result =str.split(','); //["java", "php", "phython", "javascript"]
var result =str.split(',',2); //["java", "php"]
indexOf(str,pos)和lastIndexOf(str,pos)
str: 要搜索的字符串
pos: 可选参数,开始搜索的位置
var str = 'java,php,phython,javascript';
var result = str.indexOf('ava'); //1
var result = str.indexOf('ava',6);//18
var result = str.lastIndexOf('p'); //25
var result = str.lastIndexOf('p',20); //9
trim()
删除字符串头和尾部的空格
var str = ' java script ';
var result = str.trim(); // "java script"
toLowerCase()、toUpperCase()
toLocaleLowerCase()、toLocalUpperCase()
一般情况下,使用toLowerCase()和toUpperCase()就足够了,但是如果不知道代码在什么语言下运行的,那么使用toLocalLowerCase()和toLocalUpperCase(),toLocalLowerCase()和toLocalUpperCase()是针对当地特定语言实现的,有少数的语言会为Unicode大小写转换应用特殊的规则,用toLocalLowerCase()和toLocalUpperCase()可以保证正确的转换语言。
var str = 'JAVASCRIPT';
var result = str.toLowerCase(); // "javascript"
var result = str.toUpperCase(); // "JAVASCRIPT"
参考文档:JavaScript高级程序设计
【注】该文章是小编复习ES5字符串知识归纳,欢迎指错!