javascript中的字符串是不可变的。一旦字符串被创建,就永远无法改变它。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量
可以通过+运算符连接其他字符串来创建一个新字符串
var lang = "java"; lang = lang + "script"; //'javascript'
以上代码的实际过程是:首先创建一个能够容纳10个字符的新字符串,然后在这个字符串中填充'java'和'script',最后一步是销毁原来的字符串'java'和'script',因为这两个字符串已经没用了
这个过程在后台发生,也是在某些旧版本浏览器(IE6)拼接字符串速度慢的原因,但浏览器后面版本已经解决了这个低效率问题
转字符串
把一个值转换为字符串有两种方式,toString()和String()
[注意]可以使用空字符串"" + 某个值,将该值转换为字符串
toString()
第一种是使用几乎每个值都有的toString()方法,这个方法返回相应值的字符串表现
[注意]undefined和null没有该方法
undefined.toString();//错误 null.toString();//错误 true.toString();//'true' false.toString();//'false' 'abc'.toString();//'abc' 1.23.toString();//'1.23' ({}).toString();//[object Object] [1,2,3,4].toString();//'1,2,3,4' (new Date()).toString();//"Sun Jun 05 2016 10:04:53 GMT+0800 (中国标准时间)" /ab/i.toString();//'/ab/i'
String()
在不知道要转换的值是不是undefined或null时,可以使用转型函数String()
转型函数String()遵循下列规则:
【1】如果值是null,则返回'null';如果值是undefined,则返回'undefined'
【2】如果值不是null或undefined,则调用toString()方法并返回原始类型值
【3】若使用toString()方法返回的是对象,则再调用valueOf()方法返回原始类型值,若使用valueOf()方法返回的是对象,会报错
// "3" String({toString: function () { return 3; } }) // "[object Object]" String({valueOf: function () { return 2; } }) // "3" String({ valueOf: function () { return 2; }, toString: function () { return 3; } })
长度属性
字符串String类型的每个实例都有一个length属性,表示字符串中的字符个数。由于字符串是不可变的,所以字符串的长度也不可变
字符串的length属性不会在for/in循环中枚举,也不能通过delete操作符删除
[注意]对于字符串s来说,最后一个字符的索引是s.length - 1
var str = "test"; console.log(str.length);//4 str.length = 6; console.log(str,str.length);//"test",4
实例方法
对象通用方法
String类型是与字符串对应的包装类型,继承了Object对象的通用方法toString()、toLocaleString()、valueOf()这三个方法
【toString()】
toString()方法返回string的原始字符串值
【toLocaleString()】
toLocaleString()方法返回string的原始字符串值
【valueOf()】
valueOf()方法返回string的原始字符串值
console.log("test".valueOf());//"test" console.log("test".toString());//"test" console.log("test".toLocaleString());//"test"
访问字符方法
字符串的访问字符方法总共有chartAt()、中括号[]、charCodeAt()和fromCharCode()四种
【chartAt()】
charAt()方法接收一个基于0的字符位置的参数,返回指定位置的字符。当参数为空或NaN时,默认参数为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 console.log(str.charAt(NaN));//h
charAt()方法涉及到Number()函数的隐式类型转换,如果转换为数值,则按照上述规则输出字符串;如果转换为NaN,则输出第0个字符
var str = "hello"; console.log(str.charAt(true));//'e' console.log(str.charAt(false));//'h' console.log(str.charAt('abc'));//'h' console.log(str.charAt({}));//'h' console.log(str.charAt([2]));//'l'
[注意]x.charAt(pos)与x.substring(pos, pos+1)、x.substr(pos,1)、x.slice(pos,pos+1)的结果相等
var str = "hello"; console.log(str.charAt(1));//'e' console.log(str.substring(1,2));//'e' console.log(str.slice(1,2));//'e' console.log(str.substr(1,1));//'e'
【中括号】
ECMAScript5定义了另一个访问字符的方法,使用方括号加数字索引来访问字符串中的特定字符。如果参数超出范围或是NaN时,则输出undefined;没有参数时,会报错;该方法没有Number()转型函数的隐式类型转换,但参数为单数值数组时可转换为数值
[注意]IE7-浏览器不支持