JS字符串总结(一)

字符串定义及特点

字符串是由零个或多个16位Unicode字符组成的字符序列

特点

  • 字符串由双引号(“)或者单引号(‘)包裹,两种写法效果相同,没有任何区别。
  • 字符串一旦创建就不可更改。
var str = 'hello';
str = str + 'world';

以上代码的实现过程:先创建一个10个字符的新字符串,填充’helloworld’,并与变量str关联起来,最后销毁’hello’和’world’这两个字符串。这个过程是在后台实现的,不可见。简单的来说,创建的字符串不可更改,要改变一个变量所保存的字符串内容,只有销毁掉原先的字符串,再生成新的字符串。

其他数据类型转换成字符串

一共有三种方法:

  1. toString()
  2. String()
  3. 加性操作符
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"
  1. 第二个参数是字符串时,也可以使用一些特殊字符序列,将正则表达式得到的字符串插入到返回的新字符串中
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字符串知识归纳,欢迎指错!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值