【注意】在《javascript高级语言程序设计》中叫做“基本包装类型”, 在《你不知道的javascript》中叫做“封装类型”, 实际上是同一个意思, 本文主要以后者为名
javascript的一句毒奶名言: 万物皆对象! 但其实我们发现: boolean, Number, String这些基本类型,好像和对象没关系嘛。是的, 它们基本类型的性质决定了它们和对象有本质的不同
但它们“背后”仍有股“来自对象”的 神秘力量的作用着...
(此处播放《走进科学》栏目让人毛骨悚然的背景音乐...)
有一天彭先生突然想起 var str = 'penghuwan'; str.substring(2)这种司空见惯的用法里,substring(2)是哪里来的? str是字符串,不是对象啊! 那又怎么会拥有对象才有的方法呢!!?
没错, 即使是boolean, number, string这种看似单纯地像一张白纸的基本类型, 在幕后也和“对象”有着肮脏的py交易。。。。 (我说的是朋友交易哦)
为了能够自由灵活地操作 Boolean, Number 和String这三个非常常用的 基本类型值(也就是有大量调用方法做处理的需求)
在访问这三个基本类型值的时候, javascript 就会创建一个“不可见”的封装类型,然后在读取完毕时候销毁
例如:
; var s2 = s1.substring(2);
(内部)相当于:
); var s2 = s1.substring(2); s1 = null
基本类型对应的封装类型的对象只在访问的时候创建,访问完毕就会销毁!该对象的生存期只有一瞬间, 用例子做个 对比:
str = ); str.color = ; console.log(str.color); // 输出red
str.color = ; // 下面这条console语句里面的访问会创建另外一个封装对象 console.log(str.color); // 输出undefined