javascript 字符串的属性和方法

作者 Haojen Ma 日期 2015-10-26
JS
javascript 字符串的属性和方法

简介

String 类型是字符串的对象包装类型,可以用String 构造函数的办法来创建

var str = new String('hello world');

该对象的方法也可以在所有基本的字符串值中访问到, 其中,继承的 valueOf() / toLocaleString() 和 toString() 方法都返回对象所表示的基本字符串值

String类型的每个实例都有一个 length 属性,表示字符串中有多少个字符串

var str = 'hello world';
str.length //length 的属性值为11 , 因为空格也算一个字符

字符方法

查询

chartAt() 和 charCodeAt(),这两个方法都接受一个参数,即基于0的字符位置 其中, chartAt()方法以单字符串的形式返回给定位置的那个字符,如下代码所示:

var  str = 'hello world';
str.chartAt(1) // 输出字符'e'

而 chartCodeAt()则是返回的字符编码

var  str = 'hello world';
str.chartCodeAt(1) // 输出字符'e'的字符编码"101"

ECMA5中还可以用类似于数组的形式访问字符串中指定的字符:

var  str = 'hello world';
str[1] // 方括号加索引值, 输出字符'e'

但是会有一定的兼容问题, 在 IE7及一下的浏览器中,会返回 undefined

indexOf and lastIndexOf

有两个可以从字符串中查找子字符串的方法: indexOf() 和 lastIndexOf(), 这两个办法都是从一个字符串中搜寻给定的子字符串, 然后返回子字符串的位置, 如果没有找到该字符串,则会返回-1, 两者的区别在于,前者从字符串的开头向尾部搜索, 后者从字符串的尾部向首部搜索.

var str ="hello world";
str.indexOf("o") //4
str.LastIndexOf("o")//7

如果指定的字符值只出现了一次,那么 indexOf()和 lastIndexOf() 会返回相同的位置值. 这两个方法都可以接受可选的第二个参数,用来表示从字符串中的哪个位置开始搜索, 且会忽略该位置之前的所有字符

var str ="hello world";
str.indexOf("o",6) //7
str.LastIndexOf("o",6)//4

利用这两种方法的特性,我们可以通过循环调用他们,来查找所有匹配的子字符串 :

var str ='everything  be okay';
var	array = new Array();
var strIndex =str.indexOf('e');
while(strIndex>-1){
	array.push(strIndex)
	 strIndex =str.indexOf('e',strIndex++);
}

alert(array)//输出str里面的所有的 e 的位置

###连接字符串 concat()用于将一个或多个字符串拼接起来,返回拼接得到的新字符串.

var str ='hello';
var result = str.concat('world','!') //输出结果 "hello world!";
str //不变

用'+'号也能进行字符串之间的拼接:

var str ='hello';
var result = str+' world '+'!';
result//hello world!;

剪裁

slice()翻译: 菜刀,切下,substr(),substring() 这三个方法都会返回被操作字符串的一个子字符串, 而且也都接受一个或者两个参数.第一个参数指定子字符串的开始位置, 第二个参数(在指定情况下)表示子字符串到哪里结束.具体来说 slice() 和 substring() 的第二个参数指定的是最后一个子字符串的位置. 而 substr() 的第二个参数指定的则是返回的字符个数.如果没给这些方法传递第二个参数,则将字符串的长度作为结束位置.与 concat()方法一样, slice() substr() 和 substring() 也不会修改字符串本身的值,他们只是返回一个基本类型的字符串值,对原始字符串没有任何影响.

slice():

第一个参数代表开始位置,第二个参数代表结束位置的下一个位置,截取出来的字符串的长度为第二个参数与第一个参数之间的差;若第二个参数值为负数,则将该值加上字符串长度后转为正值;若第一个参数等于大于第二个参数,则返回空字符串. slice 的第一个参数为负数, 那么 slice 也会负数与该字符串的长度相加,转换成正值,当然第二个也允许负值 var str ="hello world"; str.slice(3) //返回从第三个字符包括后面的所有字符 : lo world str.slice(3,6)// 返回 "lo " str.slice(-3,-1)//结果是总字符串的长度+-3 =8, 然后再加-1,结果是10, 等同于 str.slice(8,10)

substring()

var str ="hello world";
str.substring(3)//"lo world"
str.substring(3,6)//与 slice表现相同,返回 lo for

与 slice()菜刀 唯一不同的是 substring() 参数为负的时候, substring() 方法会把所有的负值参数都转换为0,且 substring 总是把最小的数为起始位置, 这就意味着

str.substring(2,-3) ==str.substring(0,2)
str.substring(-3) 

结果与 substring(0) 相同结果是 hello world

substr()

与以上两个方法的第二个参数不同的是, substr()方法的第二个参数指定的是要返回的字符个数, 而不是要返回的位置;

var str = 'hello world'
str.substr(1,6)//返回ello w

substr() 在负数的情况下也会将第二个参数转换为0,这也就意味着返回包含零个字符的字符串,也就是一个空的字符串

split()

这个方法可以基于指定的分隔符将一个字符串分割成多个子字符串,并将结果放在一个数组中, 分隔符可以是字符串, 也可以是一个 RegExp 对象. 且 solit()方法可以接受可选的第二个参数,用于指定数组的大小,以便确保范湖的数组不会超过既定的大小 注意: 该方法有兼容性的问题

var colorText ='red ,blue ,green,yellow';
var color1= colorText.split(',') //['red','blue','green','yellow']
var color1= colorText.split(',' , 2) //['red','blue']

trim() (修剪,装饰)

这个方法会创建一个字符串的副本, 删除前置及后缀的所有空格,然后返回结果 var str = " hello world " var trimStr =str.trim();// 结果是" hello world"

trim()返回的是字符串的副本, 不会改变原始值, 还有该方法指定具体方向的方法 trimLeft() 和 trimRight, 用于删除字符串开头和末尾的空格

大小写转换

ECMAScript中涉及字符串大小写转换的方法有4个:

  1. toLowerCase()
  2. toLocaleLowerCase() //针对某些地区实现正确转换的方法
  3. toUpperCase()
  4. toLocaleUpperCase() //针对某些地区实现正确转换的方法

匹配

match()

String 类型定义了几个用于在字符串中匹配模式的方法, 第一个方法就是 match() , 该方法只接受一个参数,要么是一个正则表达式,要么是一个 RegExp 对象

var text = "cat, bat, sat , fat";
var pattern =/.at/;
//与 pattern.exec(text)相同
matches[0] //cat

search()

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

var text= "cat, bat, sat , fat";
var pos = text.search(/at/); //返回 1 , 即' at' 在字符串中第一次出现的位置

replace() --未完待续

为了简化替换子字符串的操作, ECMAScrpt 提供了 该方法, 这个方法接受两个参数: 第一个参数可以是一个 RegExp对象或者是一个字符串, 第二个参数可以是一个字符串或者一个函数. 如果第一个参数是字符串, 那么只会替换第一个子字符串. 如果要替换所有的子字符串, 就是提供一个正则表达式,且指定全局( g )

var text ="cat, bat, sat , fat";
var	result = text.replace('at','ond'); //输出 cont, bat,sat,fat
			  text.replace(/at/g,'ond')//cont,bont,sond,fond

比较

localeCompare() 方法比较两个字符串,并返回下列值中的一个:

  • 如果字符串在字母表中应该排在字符串参数之前, 则返回一个负数;(多数情况是-1)
  • 如果字符串等于字符串参数,则返回0;
  • 如果字符串在字母表中应该排在字符串参数之后, 则返回一个整数;(多数情况是1)

需要注意的是大写字母排在小写字母的前面

var str ='yellow';
str.localeCompare("brick") //1  可以理解为, localeCompare左边的unicode 值要大于右面的,返回整数,小于则返回负数,相等返回0

编码字符转换

fromCharCode()是一个静态方法, 这个方法的功能是接受一个或者多个字符串编码,然后将他们转换成一个字符串,这个方法与实例方法 charCodeAt() 执行的是相反的操作.

String.formCharCode(104, 101, 108, 111) ; //hello