字符串是JavaScript中7种数据中的一种,用于表示由零个或多个16位的Unicode字符组成的字符序列。创建字符串有两种方式,一种是字面量,另一种是构造函数。
字面量
1
var str = "一个字符串";
构造函数
1
var str = new String("一个字符串");
上面就是两个字符串,但是字面量对构造函数说:“我们不一样。”
那有啥不一样?好。下面来看看具体的。1
2
3
4
5
6var str1 = "一个字符串";
console.log(str1); // 一个字符串
console.log(typeof str1); // string
var str2 = new String("一个字符串");
console.log(str2); // String {"一个字符串"}
console.log(typeof str2); // object
可以看出来两个的值与类型都不相同。使用字面量就是返回一个字符串。使用构造函数则是一个字符串对象。如果要将字符串对象转换为字符串。可以使用toString
,toLocalSring
,valueOf
转换为字符串。1
2
3
4
5
6var str2 = new String("一个字符串");
console.log(str2); // String {"一个字符串"}
console.log(typeof str2); // object
console.log(str2.toString()) // 一个字符串
console.log(str2.toLocaleString()) // 一个字符串
console.log(str2.valueOf()) // 一个字符串
这样要使用一个字符串费劲。所以一般看不到这样的操作,都是使用的字面量定义。下面的关于字符串的一些方法都将使用字面量的形式。
字符串是有长度的
字符串是有长度这个属性的。从刚刚的构造函数中可以看出来。获取长度使用length
属性就不在过多的说明。
字符方法
字符串用于两个访问特定字符的方法:charAt
:一个参数,返回给定位置的字符charCodeAt
:一个参数,返回给定位置的字符的字符编码
以及一个将字符编码转换为字符的方法,这个是String
构造函数的fromCharCode
1 | var str = "测试字符方法"; |
虽说可以使用下标获取指定位置的字符。但是此方法不兼容IE8以下
。所以如果使用需要谨慎。
字符操作方法
concat() - 拼接字符串
concat
方法用于讲一个或者多个字符串拼接起来。所以他接收一个或者多个字符创作为参数。1
2
3
4var str = "我";
var res = str.concat("喜","欢","你","!");
console.log(str); // 我
console.log(res); // 我喜欢你!
经过上面的代码发现,使用concat
是不会影响原字符串的。这个方法在数组中也存在,不过那是连接数组了。
虽说可以使用concat
方法连接两个或者两个以上的字符串,但是基本不使用。开发中还是使用+
号拼接的使用更多。
substr(),substring(),slice() - 切割字符串
三个方法都是基于字符串创建新字符的方法,都接收一个或者两个参数
,返回一个新字符串,不影响原字符串。第一个参数是切割的开始位置(包括这个位置)。
substr
:第二个参数指切割的字符串的个数,因为是个数。所以包含最后一个substring
:第二个参数指切割的字符串的位置,不包含最后一个slice
:第二个参数指切割的字符串的位置,不包含最后一个
三个若都没有第二个参数。默认都字符串末尾1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18var str = "我喜欢你一生一世!";
// 传递的参数是一个正数
console.log(str.substr(2)); // 欢你一生一世!
console.log(str.substring(2)); // 欢你一生一世!
console.log(str.slice(2)); // 欢你一生一世!
console.log(str.substr(2,3)); // 欢你一
console.log(str.substring(2,3)); // 欢
console.log(str.slice(2,3)); // 欢
// 传递的参数是一个负数
console.log(str.substr(-3)); // 一世!
console.log(str.substring(-3)); // 我喜欢你一生一世!
console.log(str.slice(-3)); // 一世!
console.log(str.substr(3,-4)); // 空字符串
console.log(str.substring(3,-4)); // 我喜欢
console.log(str.slice(3,-4)); // 你一
对比上面的代码。当两个参数都是正数的时候很简单。但是当两个都是负数的时候,问题就来了。substr
会将负的
第一个参数从后往前数
第几位作为开始位置。负的
第二个参数转化为0。slice
会将负数全部从后往前数。但是substring
像是没事人一样。把负数忽略了。转化为0,同时以较小数作为开始位置。
字符串位置方法 - 查找字符串
indexOf
:从头到尾的找lastIndexOf
:从尾到头的找
两个方法都接收一个或者两个参数
,第一个是需要查找的字符,第二个是从哪个位置开始查找(下标,默认是0)。
1 | var str = "我是真的真的喜欢你!"; |
可以看的,不管是indexOf
还是lastIndexOf
找到字符串后都会返回这个字符的下标。不过一个是正着数一个是倒着数。但是当去寻找小三他
的时候没有发现小三旧放回一个-1
。
所以,两个方法都是找到返回下标(注意从哪头开始的)
。未找到返回 -1
。
trim()方法
trim()
方法很简单,就是取出字符串的收尾的空格。但是此方法不兼容IE8
及以下。1
2
3var str = " 我喜欢你! ";
console.log(str); // 我喜欢你!
console.log(str.trim()); // 我喜欢你!
如果是要兼容IE8
及以下,可是使用正则去替换。1
2
3
4
5
6
7var str = " 我喜欢你! ";
var res = str.replace(/^\s*|\s*$/g,"");
console.log(res); // 我喜欢你!
var str = " 我喜 欢你! ";
var res = str.replace(/^\s*|\s*$/g,"");
console.log(res); // 我喜 欢你!
大小写转化方法
四个方法:toLowerCase
:转换为小写toLocaleLowerCase
:转换为当地时区小写,一些地方专用toUpperCase
:转换为大写toLocaleUpperCase
:转换为当地时区大写,一些地方专用1
2
3
4
5var str = "I Love You!";
console.log(str.toLowerCase()); // i love you!
console.log(str.toLocaleLowerCase()); // i love you!
console.log(str.toUpperCase()); // I LOVE YOU!
console.log(str.toLocaleUpperCase()); // I LOVE YOU!
为了保险起见,使用带Locale的更好。
字符串匹配方法
match() - 匹配
match
本质上与RegExp的exec()方法是一样的。接收一个参数,正则表达式或者是RegExp对象。返回一个数组。1
2
3
4var str = "bat,cat,fat,hat";
var reg = /.at/g;
var res = str.match(reg);
console.log(res) // (4) ["bat", "cat", "fat", "hat"]
var res = str.match(reg);
与var res = reg.exec(str);
本质上相同。但是后面的无论是不是全局都是返回长度为1的数组。如果不是全局匹配,两者没有区别。
search() - 搜索
search
的参数与match
一样。search
方法返回字符串中第一个匹配项的索引。没有则返回-1
。1
2
3
4var str = "bat,cat,fat,hat";
var reg = /at/;
var res = str.search(reg);
console.log(res); // 1。因为第一个 a 的下标为 1
replace() - 替换
replace
方法是字符串中十分重要
的一个方法,必须掌握。接收两个参数
。
第一个参数:可以是一个字符串或者是一个正则
第二个参数:可以是一个字符串或者是一个函数
第二个参数是字符串
:1
2
3
4
5
6var str = "abcdcba";
var res1 = str.replace("b","逼");
console.log(res1); // a逼cdcba
var res2 = str.replace(/b/g,"逼");
console.log(res2); // a逼cdc逼a
第一个参数为字符串
基本不用,因为他只能匹配第一个,且只能匹配一个
第二个参数是函数
:
如果是函数
第一个参数:匹配项中间的参数:捕获组1,捕获组2,捕获组3······
倒数第二个:位置
最后一个:原始字符串
1 | var str = "fathermatherbrothersister"; |
第二个参数既然可以拿到这些东西。那我们就可以做任何事情。
split() - 分割
split
方法可以将字符串按指定的符号进行分割,返回一个数组。
第一个参数:分隔符。字符串或者正则
第二个参数:可选。返回数字的长度,不能大于可切割的长度1
2
3
4var color = "yellow,red,green,blue";
console.log(color.split(",")); // (4) ["yellow", "red", "green", "blue"]
console.log(color.split(",",2)); //(2) ["yellow", "red"]
console.log(color.split(/[^,]+/)); (5) ["", ",", ",", ",", ""] 。[^,]除了 , 以外