- 简介
- Boolean类型
- Number类型
- toFixed()
- String类型
- 字符串操作方法
- 字符串位置方法
- trim()方法
- 字符串大小写转换方法
- 字符串的模式匹配方法
- split()
- fromCharCode()
简介
为了便于操作基本类型值,ECMAScript还提供了3个特殊的引用类型:Boolean、Number和String。这些类型与本章介绍的其他引用类型相似,但同时也具有与各自的基本类型相应的特殊行为。实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据。例如:
var s1 = 'some text';
var s2 = s1.substring(2)
这个例子中的变量s1包含一个字符串,字符串当然是基本数据类型。而下一行调用了s1的substring()方法,并将返回的结果保存在了s2中。我们知道,基本类型不是对象,因而从逻辑上将它们不应该有方法。其实,为了让我们实现这种直观的操作,后台已经自动完成了一系列的处理。当第二行代码访问s1时,访问过程处于一种读取模块,也就是要从内存中读取这个字符串的值。而在读取模式中访问字符串时,后台都会自动完成下列处理。
(1)创建String类型的一个实例;
(2)在实例上调用指定的方法;
(3)销毁这个实例;
等用于下面代码
var s1 = new String('some text')
var s2 = s1.substring(2)
s1 = null
经过此番处理,基本的字符串就变得跟对象一样了。而且上面这三个步骤也分别适用于Boolean和Number类型对应的布尔值和数字值。
引用类型和基本包装类型的主要区别就是对象的生存期。使用new操作符创建的引用类型的实例,在执行流离开当前作用域 之前都一直保存在内存中。而自动创建的基本包装类型的对象,则存在于一行代码的执行瞬间,然后立即被销毁。这意味着我们不能在运行时为基本类型值添加属性和方法。例如:
var s1 = 'some text'
s1.color = 'red'
console.log(s1.color) // undefined
在此,第二行代码试图为字符串s1添加一个color属性。但是当第三行代码再次访问时,其color属性不见了。问题的原因就是第二行创建的String对象在添加完属性之后就已经被销毁了,所以第三行代码又创建了自己的String对象,跟第二行创建的String对象已经不是同一个了,而该对象没有color属性,所以返回undefined。
Number包装类型
在处理Number类型时也是一样,Number是与数字对应的基本包装类型。要创建Number实例,可以在调用Number构造函数时向其中传递相应的数值。例:
var num = new Number(10)
上面num是一个基本包装类型的对象。
toFixed()
toFixed()方法会按照指定的小数位返回数值的字符串表示,如果数值本身包含的小数位比指定的还多,那么就会四舍五入,例:
var num = 10
console.log(num.toFixed(2)) // '10.00'
var num1 = 10.005
console.log(num1.toFixed(2)) // '10.01'
String类型
字符方法
(1)charAt()方法可以返回指定位置的字符。例:
var str = 'hello world'
console.log(str.charAt(1)) // e
返回指定位置的字符还有另外一种常用的方法,直接用方括号加数字索引来访问字符串中的指定字符。例:console.log(str[1]) // e,效果跟上面的方法一样。
(2)charCodeAt()方法返回指定位置的Unicode字符编码。例:
var str = 'hello world'
console.log(str.charCodeAt(1)) // 101
如果是汉子返回值超过255,这个方法常用来判断字符串中是否有汉子
字符串操作方法
(1)concat()方法用于将一个或多个字符串拼接起来,返回拼接得到的新字符串,(不会改变原来的字符串)例:
var str = 'hello'
var strValue = str.concat('world')
console.log(str) // hello
console.log(strValue) // hello world
实际上concat()方法可以接受多个参数,不过一般拼接字符串都用‘+’加号来拼接更方便一些。
(2)slice()、substr()和substring()
slice()方法可提取字符串的某个部分。(不会改变原来的字符串)
接收两个参数,一个是开始位置,一个是结束位置。
substring()方法提取字符串的某个部分。(不会改变原来的字符串)
接收两个参数,一个是开始位置,一个是结束位置。
substr()方法从开始位置提取指定个数的字符串。(不会改变原来的字符串)
接收两个参数,一个是开始位置,一个是指定个数。(参数都为非负整数)
共同点:(1)它们都可以提取字符串的某个部分,都可以最多接收两个参数。
(2)第一个参数都是开始截取位置。
不同点:(1)slice()方法的两个参数都是可选,substr()和substring()两个方法的第一个参数都是必需,第二个参数都是可选。
(2)第一个参数都是开始截取位置,第二个参数slice()和substring()两个方法都是结束位置并且不包括最后一个位置的字符,substr()方法是截取字符串个数。
(3)它们的主要区别在于传递的参数 是负数:
传入的第一个参数为负数时,slice()方法和substr()方法会将负数与字符串的长度想加,substring()方法会将负数转为0。
传入第二个参数为负数时,slice()方法会将负数与字符串长度想加,substr()方法和substring()方法会将负数转为0。
当两个参数都被转为非负整数并且第一个参数比第二个参数大的时候,substring()方法会将较小的数作为开始位置,较大的数作为结束位置,但是slice()和substr()方法不会,会返回一个空字符串。例:
var str = 'hello world'
console.log(str.slice(-3)) // 'rld'
console.log(str.substring(-3)) // 'hello world'
console.log(str.substr(-3)) // 'rld'
console.log(str.slice(3, -10)) // ''
console.log(str.substring(3, -10)) // 'el'
console.log(str.substr(3, -10)) // ''
字符串位置方法
有两个可以从字符串中查找子字符串位置的方法:indexOf()和lastIndexOf()。前者是从前往后查找,后者是从后往前查找,这两个方法还可以接收第二个参数,表示从字符串指定的位置开始查找,例:
var str = 'hello world'
console.log(str.indexOf('o', 6)) // 7
console.log(str.lastIndexOf('o', 6)) // 4
在使用第二个参数的情况下可以找到所有匹配的子字符串,例:
var str = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit';
var position = []
var pos = str.indexOf('e')
while(pos > -1) {
position.push(pos)
pos = str.indexOf('e', pos + 1)
}
console.log(position) // 3, 24, 32, 52
trim()方法
这个方法是用来删除字符串的前后空格,然后返回结果,不会改变原有字符串。
字符串大小写转换方法
(1)toLowerCase()是将所有英文字符转为小写。
(2)toUpperCase()是将所有英文字符转为大写。
字符串的模式匹配方法
String类型定义了几个用于在字符串中匹配模式的方法。
(1)match()
参数:只接收一个参数,正则表达式或者字符串。参数必须不会改变原有字符串。
定义:这个方法本质上与调用RegExp的exec()方法相同。方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配,返回的是匹配项,没有匹配返回null,例:
var text = 'cat, bat, sat, fat'
var pattern = /.at/
//与pattern.exec(text)相同
var matches = text.match(pattern)
console.log(matches.index) // 0
console.log(matches[0]) // 'cat'
console.log(pattern.lastIndex) // 0
match()方法返回了一个数组,第一项是与整个模式匹配的字符串。
(2)search()
参数:只接收一个参数,正则表达式或者字符串。参数必须不会改变原有字符串。
定义:方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。返回的是匹配信息第一次出现的位置,没有则返回-1,类似于indexOf方法,但是后者不能接收正则表达式。
(3)replace()方法
参数:两个参数都是必须,第一个是规定子字符串或要替换的模式的 RegExp 对象,第二个是一个字符串值。规定了替换文本或生成替换文本的函数。
方法:用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
如果第二个参数是字符串,那么还可以使用一些特殊的字符序列,将正则表达式操作得到的值插入到结果字符串中。下面列出了这些特殊的字符序列。
字符序列 替换文本
$$ $
$& 匹配整个模式的子字符串
$' 匹配的子字符串之前的子字符串
$` 匹配的子字符串之前的子字符串
$n 匹配第n个捕获组的子字符串,其中n等于0-9,例如$1是匹配第一个捕获组的子字符串,$2是第二个。。。没有的话则为空字符串
$nn 匹配第nn个捕获组的子字符串,其中nn等于01-99,例如$01匹配第一个捕获组的子字符串,$02是第二个。。。没有的话则为空字符串
例:
var text = 'cat, bat, sat, fat'
result = text.replace(/.at/g, 'word($1)')
console.log(result) // word(cat), word(bat), word(sat), word(fat)
split()
参数:两个参数,第一个参数是必需,可以是字符串也可以是正则表达式,第二个参数可选,指定了返回数组的最大长度。
定义:方法用于把一个字符串分割成字符串数组。
fromCharCode()
这个方法的任务是接收一个或多个字符编码,然后将它们转换成一个字符串,从本质上来看,这个方法与实例方法charCodeAt()执行的是相反的操作,例:
console.log(String.fromCharCode(104, 101, 108, 108, 111)) // hello







网友评论