开启掘金成长之旅!这是我参加「掘金日新计划·12月更文挑战」的第六天,点击查看活动详情
String对象
概述
String对象是JavaScript原生提供的三个包装对象之一,用来生成字符串对象。
var s1 = 'abc';
var s2 = new String('abc');
typeof s1 //"String"
typeof s2 //"object"
s2.valueOf() //"abc"
上面代码中,变量s1是字符串,s2是对象。由于s2是字符串对象,s2.valueOf
方法返回的就是他所对应的原始字符串。
字符串对象是一个类似数组的对象(很像数组,但不是数组)。
new String('abc')
//String{0:"a",1:"b",2:"c",length:3}
(new String('abc'))[1] //"b"
上面代码中,字符串abc对应的字符串对象,有数值键(0、1、2)和length属性,所以可以像数组那样取值。
除了用作构造函数,String对象还可以当作工具方法使用,将任意类型的值转为字符串。
String(true) //"true"
String(5) //"5"
上面代码将布尔值true和数值5,分别转换为字符串。
静态方法
String.fromCharCode()
String对象提供的静态方法(即定义在对象本身,而不是定义在对象实例的方法),主要是String.fromCharCode()
。该方法的参数是一个或多个数值,代表Unicode码点,返回值是这些码点组成的字符串。
String.fromCharCode()//""
String.fromCharCode(97)//"a"
String.fromCharCode(104,101,108,108,111)//"hello"
上面代码中,String.fromCharCode()
方法的参数为空,就返回空字符串;否则,返回参数对应的Unicode字符串。
注意,该方法不支持Unicode码点大于0xFFFF的字符,即传入的参数不能大于0xFFFF(即十进制的65535)。
String.fromCharCode(0x20BB7)// "ஷ"`
String.fromCharCode(0x20BB7)===String.fromCharCode(0x0BB7)
//true
上面代码中,0x20BB7拆成两个字符0xD842和0xDFB7(即两个两字节字符,合成一个四字节字符),就能得到正确的结果。码点大于0xFFFF的字符的四字节表示法,由UTF-16编码方法决定。
实例属性
String.prototype.length
字符串实例的length属性返回字符串的长度。
var str = 'abc'
'abc'.length //3
str(基本类型)访问属性时会发生以下过程:
1.系统会默认调用new String('abc')
,生成一个字符串包装对象
2.为当前对象实例进行属性访问
3.当.xxx访问行为结束后(即当前行结束),将生成的包装实例对象删除掉
实例方法
String.prototype.charAt()
charAt方法返回指定位置的字符,参数是从0开始编号的位置。
var s = new String('abc');
s.charAt(1) //"b"
s.charAt(s.length - 1) //"c"
这个方法完全可以用数组下标替代。
'abc'.charAt(1) //"b"
'abc'.[1] //"b"
如果参数为负数,或大于等于字符串的长度,charAt返回空字符串。
'abc'.charAt(-1) //""
'abc'.charAt(3) //""
String.prototype.charCodeAt()
charCodeAt()
方法返回字符串指定位置的Unicode码点(十进制表示),相当于String.fromCharCode()
的逆操作。
'abc'.charCodeAt(1) //98
上面代码中,abc的1号位置的字符是b,他的Unicode码点是98.
如果没有任何参数,charCodeAt
返回首字符的Unicode码点。
'abc'.charCodeAt() //97
如果参数为负数,或大于等于字符串的长度,charCodeAt
返回NaN。
'abc'.charCodeAt(-1) // NaN
'abc'.charCodeAt(4) // NaN
注意,charCodeAt
方法返回的 Unicode 码点不会大于65536(0xFFFF),也就是说,只返回两个字节的字符的码点。如果遇到码点大于 65536 的字符(四个字节的字符),必须连续使用两次charCodeAt
,不仅读入charCodeAt(i)
,还要读入charCodeAt(i+1)
,将两个值放在一起,才能得到准确的字符。
String.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
方法将参数先转为字符串再连接,所以返回的是一个三个字符的字符串。作为对比,加号运算符在两个运算符都是数值时,不会转换类型,所以返回的是一个两个字符的字符串。