苦逼前端

Javascript两种创建字符串方式的区别

Javascript2013-11-17 21:15

我们在创建字符串的时候,最常用的是直接定义的方法,如 var a = 'aaa', 那么不常用的 var b = new String('aaa') 和前者有什么区别呢?

前者是基础数据类型string,后者是一个字符串对象object类型。所以b.b = 'bb'是可以的,而a.b='bb'是不可以的。

但是考虑到基础数据类型string也有一些自带的拓展方法或属性,如a.length,a.indexOf(),a.charAt(),a.split(),a.substring()等,那为什么却不能扩展方法或属性呢?

原来js存在自动装箱行为,当使用上述方法时,js会自动把基础数据类型装箱为与之对应的引用类型,操作结束后再把引用类型还原为基础类型。

如果想扩展a的属性或方法,可以先对其进行装箱:a = new String(a);然后可以实现a.b = 'bb',当然也可以通过原型的方法:String.prototype.b = 'bb',但这样所有的字符串都拥有了b属性,污染了原型,所以不建议使用。

如果想获得一个字符串对象的基础数据类型string,可以用valueOf(),比如上面例子中的b,执行b = b.valueOf()之后它的数据类型便被转化为string类型了,可以把这一步看作是拆箱操作。

评论(0)
  • 暂无评论,求挽尊...
还可输入200个字