前面的话
string是由单引号或双引号括起来的字符序列,且被限定在同种引号之间,即必须是成对单引号或双引号。字符串的独特在于它是唯一没有固定大小的原始类型
字符串中每个字符都有特定的位置,首字符从位置0开始,第二个字符在位置1,依次类推,这意味着字符串中的最后一个字符的位置一定是字符串的长度减1
特点
JavaScript中的字符串是不可变的。字符串连接需要先创建一个新字符串,然后在新字符串中填充两个需要拼接的字符串,最后再销毁原来的字符串。这个过程在后台发生,也是在某些旧版本浏览器(IE6)拼接字符串速度慢的原因,但后来已经解决了这个低效率问题。
var lang = "java";
lang = lang + "script";
转义字符
转义字符也叫字符字面量
\0 空字节
\n 换行
\t 制表
\b 空格
\r 回车
\f 进纸
\\ 斜杠
\' 单引号
\" 双引号
\xnn 以十六进制nn表示一个字符(n为0-f),如\x41表示'A'
\unnnn 以十六进制nnnn表示一个Unicode字符(n为0-f),如\u03a3表示希腊字符ε
当字符串中包含引号,有三种解决方案
[1]单引号中嵌入双引号
[2]双引号中嵌入单引号
[3]使用转义符"\"
console.log('"test"');//"test"
console.log("'test'");//'test'
console.log('\'test\'');//'test'
继承的方法
String类型是与字符串对应的包装类型,继承了引用类型的通用方法
valueOf()、toString()和toLocaleString():返回字符串表示
console.log("test".valueOf());//"test"
console.log("test".toString());//"test"
console.log("test".toLocaleString());//"test"
length属性
String类型的每个实例都有一个length属性,表示字符的个数
[注意]该属性只可读取,不可改变
var str = "test";
console.log(str.length);//4
str.length = 6;
console.log(str,str.length);//"test",4
String()方法
String()方法的转换规则是:
[1]如果值有toString()方法,则调用该方法(没有参数)并返回相应结果
[2]null和undefined没有toString()方法,则返回null和undefined
console.log(undefined.toString())//报错
console.log(null.toString())//报错
console.log(String(undefined));//'undefined'
console.log(String(null));//'null'
console.log(String(true),String(false));//'true' 'false'
console.log(String(10.1));//10.1
console.log(String({}));//[object Ojbect]
[注意]要把某个值转换为字符串,可以使用加号操作符把它与一个空字符串''加在一起
console.log(typeof (1 + ''),(1 + ''));//string '1'
console.log(typeof (undefined + ''),(undefined + ''));//string 'undefined'
console.log(typeof (null + ''),(null + ''));//string 'null'
console.log(typeof (true + ''),(true + ''));//string 'true'
console.log(typeof ({} + ''),({} + ''));//string '[object Object]'
访问字符方法
接收一个基于0的字符位置的参数,并以单字符字符串的形式返回
charAt():返回给定位置的字符
[注意]当参数为空时,默认参数为0;当参数超出范围时,则什么都不输出
var str = "hello";
console.log(str.charAt(1));//e
console.log(str.charAt(-1));//空
console.log(str.charAt(10));//空
console.log(str.charAt());//h
中括号加数字索引(ES5):返回给定位置的字符(IE7-不支持,输出undefined)
[注意]当参数超出范围时,输出undefined;当参数为空时,报错
var str = "hello";
console.log(str[1]);//e
console.log(str[-1]);//undefined
console.log(str[10]);//undefined
console.log(str[]);//报错
charCodeAt():返回给定位置的字符编码,字符编码为Number类型
[注意]当参数为空时,默认参数为0;当参数超出范围时,则输出NaN
var str = "hello";
console.log(str.charCodeAt(1));//101
console.log(str.charCodeAt(-1));//NaN
console.log(str.charCodeAt(10));//NaN
console.log(str.charCodeAt());//104
String.fromCharCode():把一个或多个编码值转成一个字符串(静态方法)
[注意]参数范围为ASCII表的范围
var stringValue = 'hello';
console.log(stringValue.charAt(1));//'e'
console.log(stringValue.charCodeAt(1));//101
console.log(typeof stringValue.charCodeAt(1));//'number'
console.log(String.fromCharCode(104,101,108,108,111));//'hello'
console.log(String.fromCharCode(0x6211,0x662f,0x5c0f,0x706b,0x67f4));//'我是小火柴'
console.log(stringValue[1]);//'e'
字符串拼接
concat():可以接受任意多个参数,用于将一个或多个字符串拼接起来,返回拼接得到的新字符串
+:加号操作符在多数情况下比concat()更简便
var stringValue = 'hello ';
console.log(stringValue.concat('world','!'));//'hello world!'
console.log(stringValue + 'world' + '!');//'hello world!'
创建字符串
返回被操作字符串的一个子字符串,若无参数则返回原字符串。共substr、subtring和slice三种
substr(a,b):a->子字符串开始位置、b->子字符串长度(可选,默认到原字符串结束)
设原字符串长度为len
[1]当a>=len时,不输出
[2]当 a<0 且 |a|<len 时,从后往前数,输出|a|个字符
[3]当 a<0 且 |a|>= len 时,输出从(0)到(b)的位置
[4]当 b<0 时,b = 0
[5]当 b>= 可提供字符数时,以最大字符数输出
[注意]IE8-在处理第一个参数为负值时存在问题,输出原字符串