请看这个例子:
var s =“hello world”; //一个字符串
var word = s.substring(s.indexOf(“”)+ 1,s.length); //使用字符串的属性
字符串本是原始类型,但是在这里为什么可以有对象类型一样的属性?
在这里,只要引用了字符串s的属性,JavaScript就会将字符串值通过调用new String(s)的方式转换成对象,这个对象继承了字符串的方法,并用来处理属性的作用。一旦属性引用结束,这个新创建的对象就会销毁(其实在实现上并不一定创建和销毁这个临时对象,然而整个过程看起来就是这样的)
同字符串一样,数字和布尔值也具有各自的方法:通过号码()和布尔()构造函数创建一个临时对象,这些方法的调用均是来自这个临时对象.NULL和未定义没有包装对象:访问它们的属性会造成一个错误。
下面给一段代码,请思考它们的执行结果:
var s =“test”; //创建一个字符串
s.len = 4; //给它设置一个属性
var t = s.len; //查询这个属性
当运行这段代时,T的值是未定义的。第二行代码创建一个临时字符串对象,并给其LEN属性赋值为4,随即销毁这个对象。第三行通过原始的(没有被修改过的)字符串值创建一个新字符串对象,尝试读取LEN属性。其属性自然是不存在,表达式求值结果为未定义。这段代码说明了在读取字符串,数字和布尔值的属性值(或方法)的时候,表现的像对象一样但如果你视图给其属性赋值,则会忽略这个操作:修改只是发生在临时对象身上,而这个临时对象并未继续保留下来。
存取字符串,数字或布尔值的属性时创建的临时对象称作包装对象,它只是偶尔用来区分字符串值和字符串对象,数字和数值对象以及布尔值和布尔对象。
注:本文章内容摘自书“JavaScript的权威指南第6版”
如果有错误的地方还请留言,大家一起讨论一下,谢谢!