共计 4950 个字符,预计需要花费 13 分钟才能阅读完成。
String 对象
概述
静态方法
大小限制 0xffff code 变 char
String.fromCharCode()
实例属性
String.prototype.length
实例方法
找位置返回字符或者 un 码,有大小限制,四个字节
String.prototype.charAt()
String.prototype.charCodeAt()
连接和剪切,删除
连接返回新的,多个参数转换为字符串连接
String.prototype.concat()
剪切,新的
String.prototype.slice(头,伟) 包头不包尾
(头)头大尾小返回空字符串 负数加长度
剪切返回新的
String.prototype.substring(头,尾。头。头大尾小自动交换 负数为 0)
String.prototype.substr(头,长度。头。负数加长度。长度为负返回空字符串)
找字符串的位置
String.prototype.indexOf(),String.prototype.lastIndexOf()
删除空格新的
String.prototype.trim()
新的
String.prototype.toLowerCase(),String.prototype.toUpperCase()
匹配返回第一个字符串 为数组形式空为 null 还 indexx input 属性
String.prototype.match()
跟上面的区别是返回第一个匹配额位置 空为 -1
String.prototype.search()
只替换第一个匹配的
String.prototype.replace()
断开返回数组
String.prototype.split()
String.prototype.localeCompare()
1. 概述
var s1 = ‘abc’;
var s2 = new String(‘abc’);
typeof s1 // “string”
typeof s2 // “object”
s2.valueOf() // “abc”
上面代码中,变量 s1 是字符串,s2 是对象。由于 s2 是字符串对象,s2.valueOf 方法返回的就是它所对应的原始字符串。
1.1 字符串对象是一个类似数组的对象(很像数组,但不是数组)。
new String(‘abc’)
// String {0: “a”, 1: “b”, 2: “c”, length: 3}
(new String(‘abc’))[1] // “b”
上面代码中,字符串 abc 对应的字符串对象,有数值键(0、1、2)和 length 属性,所以可以像数组那样取值。
1.2 除了用作构造函数,String 对象还可以当作工具方法使用,将任意类型的值转为字符串。
String(true) // “true”
String(5) // “5”
上面代码将布尔值 true 和数值 5,分别转换为字符串。
2. 静态方法
2.1String.fromCharCode()
该方法的参数是一个或多个数值,代表 Unicode 码点,返回值是这些码点组成的字符串。
String.fromCharCode() // “”
String.fromCharCode(97) // “a”
String.fromCharCode(104, 101, 108, 108, 111)
// “hello”
2.2String.fromCharCode 发现参数值大于 0xFFFF,就会忽略多出的位(即忽略 0x20BB7 里面的 2)。
解决
把 0x20BB7 拆成两个字符表示。
String.fromCharCode(0xD842, 0xDFB7)
// “????”
上面代码中,0x20BB7 拆成两个字符 0xD842 和 0xDFB7(即两个两字节字符,合成一个四字节字符),就能得到正确的结果。码点大于 0xFFFF 的字符的四字节表示法,由 UTF-16 编码方法决定。
3 实例属性
3.1String.prototype.length
4 实例方法
4.1String.prototype.charAt()
charAt 方法返回指定位置的字符,参数是从 0 开始编号的位置
‘abc’.charAt(1) // “b”
‘abc'[1] // “b”
如果参数为负数,或大于等于字符串的长度,charAt 返回空字符串。
‘abc’.charAt(-1) // “”
‘abc’.charAt(3) // “”
4.2String.prototype.charCodeAt()
charCodeAt 方法返回字符串指定位置的 Unicode 码点(十进制表示),相当于 String.fromCharCode()的逆操作
4.2.1 如果没有任何参数,charCodeAt 返回首字符的 Unicode 码点。
‘abc’.charCodeAt() // 97
4.2.2 如果参数为负数,或大于等于字符串的长度,charCodeAt 返回 NaN。
‘abc’.charCodeAt(-1) // NaN
‘abc’.charCodeAt(4) // NaN
4.2.3 注意,charCodeAt 方法返回的 Unicode 码点不会大于 65536(0xFFFF),也就是说,只返回两个字节的字符的码点。如果遇到码点大于 65536 的字符(四个字节的字符),必需连续使用两次 charCodeAt,不仅读入 charCodeAt(i),还要读入 charCodeAt(i+1),将两个值放在一起,才能得到准确的字符
4.3String.prototype.concat()
concat 方法用于连接两个字符串,返回一个新字符串,不改变原字符串。
var s1 = ‘abc’;
var s2 = ‘def’;
s1.concat(s2) // “abcdef”
s1 // “abc”
该方法可以接受多个参数。
‘a’.concat(‘b’, ‘c’) // “abc”
如果参数不是字符串,concat 方法会将其先转为字符串,然后再连接。
var one = 1;
var two = 2;
var three = ‘3’;
”.concat(one, two, three) // “123”
one + two + three // “33”
上面代码中,concat 方法将参数先转成字符串再连接,所以返回的是一个三个字符的字符串。作为对比,加号运算符在两个运算数都是数值时,不会转换类型,所以返回的是一个两个字符的字符串。
4.4String.prototype.slice(头,尾)
4.4.1(头)
4.4.2 如果参数是负值,表示从结尾开始倒数计算的位置,即该负值加上字符串长度。
‘JavaScript’.slice(-6) // “Script”
‘JavaScript’.slice(0, -6) // “Java”
‘JavaScript’.slice(-2, -1) // “p
如果第一个参数大于第二个参数,slice 方法返回一个空字符串。
‘JavaScript’.slice(2, 1) // “”
5.String.prototype.substring()头,尾。头。头大尾小自动交换 负数为 0
6.String.prototype.substr()
String.prototype.substr(头,长度。头。负数加长度。长度为负返回空字符串)
7.String.prototype.indexOf(),String.prototype.lastIndexOf()
indexOf 方法用于确定一个字符串在另一个字符串中第一次出现的位置,返回结果是匹配开始的位置。如果返回 -1,就表示不匹配。
‘hello world’.indexOf(‘o’) // 4
‘JavaScript’.indexOf(‘script’) // -1
indexOf 方法还可以接受第二个参数,表示从该位置开始向后匹配。
‘hello world’.indexOf(‘o’, 6) // 7
lastIndexOf 方法的用法跟 indexOf 方法一致,主要的区别是 lastIndexOf 从尾部开始匹配,indexOf 则是从头部开始匹配。
‘hello world’.lastIndexOf(‘o’) // 7
另外,lastIndexOf 的第二个参数表示从该位置起向前匹配。
‘hello world’.lastIndexOf(‘o’, 6) // 4
8.String.prototype.trim()
trim 方法用于去除字符串两端的空格,返回一个新字符串,不改变原字符串。
‘ hello world ‘.trim()
// “hello world”
该方法去除的不仅是空格,还包括制表符(t、v)、换行符(n)和回车符(r)。
‘rnabc t’.trim() // ‘abc’
9.String.prototype.toLowerCase(),String.prototype.toUpperCase()
10.String.prototype.match()
match 方法用于确定原字符串是否匹配某个子字符串,返回一个数组,成员为匹配的第一个字符串。如果没有找到匹配,则返回 null。
‘cat, bat, sat, fat’.match(‘at’) // [“at”]
‘cat, bat, sat, fat’.match(‘xt’) // null
返回的数组还有 index 属性和 input 属性,分别表示匹配字符串开始的位置和原始字符串。
var matches = ‘cat, bat, sat, fat’.match(‘at’);
matches.index // 1
matches.input // “cat, bat, sat, fat”
11.String.prototype.search(),11.String.prototype.replace()
search 方法的用法基本等同于 match,但是返回值为匹配的第一个位置。如果没有找到匹配,则返回 -1。
‘cat, bat, sat, fat’.search(‘at’) // 1
search 方法还可以使用正则表达式作为参数,详见《正则表达式》一节。
replace 方法用于替换匹配的子字符串,一般情况下只替换第一个匹配(除非使用带有 g 修饰符的正则表达式)。
‘aaa’.replace(‘a’, ‘b’) // “baa”
12.String.prototype.split()
12.1split 方法按照给定规则分割字符串,返回一个由分割出来的子字符串组成的数组。
‘a|b|c’.split(‘|’) // [“a”, “b”, “c”]
如果分割规则为空字符串,则返回数组的成员是原字符串的每一个字符。
12.2’a|b|c’.split(”) // [“a”, “|”, “b”, “|”, “c”]
如果省略参数,则返回数组的唯一成员就是原字符串。
12.3’a|b|c’.split() // [“a|b|c”]
12.4 两个连续的变成一个空字符
‘a||c’.split(‘|’) // [‘a’, ”, ‘c’]
12.5 在第一个或者最后一个变成空字符
‘|b|c’.split(‘|’) // [“”, “b”, “c”]
‘a|b|’.split(‘|’) // [“a”, “b”, “
12.6 第二个参数 数组的长度
c’.split(‘|’, 0) // []
‘a|b|c’.split(‘|’, 1) // [“a”]
‘a|b|c’.split(‘|’, 2) // [“a”, “b”]
‘a|b|c’.split(‘|’, 3) // [“a”, “b”, “c”]
‘a|b|c’.split(‘|’, 4) // [“a”, “b”, “c”]
13.String.prototype.localeCompare()
‘apple’.localeCompare(‘banana’) // -1
‘apple’.localeCompare(‘apple’) // 0
localeCompare 方法会考虑自然语言的排序情况,将 B 排在 a 的前面。
‘B’.localeCompare(‘a’) // 1
上面代码中,localeCompare 方法返回整数 1,表示 B 较大。
localeCompare 还可以有第二个参数,指定所使用的语言(默认是英语),然后根据该语言的规则进行比较。
‘ä’.localeCompare(‘z’, ‘de’) // -1
‘ä’.localeCompare(‘z’, ‘sv’) // 1
上面代码中,de 表示德语,sv 表示瑞典语。德语中,ä小于 z,所以返回 -1;瑞典语中,ä大于 z,所以返回 1。