惨痛的浙江大华面试,面试官问了我一个问题:为什么字符串可以直接点一个方法来使用呢?我当时内心的想法是:这还用问吗?不都这么用的吗?当然,我没敢说出来。时隔一月之久,来康康它到底为什么可以这样使用......
在前面的学习总结中已经了解到了常问的JS数据类型。其中有一类是基本类型,而基本类型和基本包装类型却又不是同一个概念:
- 基本类型:undefined、null、Boolean、Number、String
- 基本包装类型:Boolean、Number、String
基本包装类型都具有自己的包装对象。对应的包装对象使得基本包装类型看起来不是对象却能够像对象一样调用方法。这就是答案。那么这个过程又是怎样的呢?举个栗子:
var str = "abcdef";
var k = str.indexOf("a");
//这张代码在后台的处理过程为:
var s1 = new String("abcdef);//临时创建一个String类型的实例
var s2 = s1.indexOf("a");//在该实例上调用指定的方法
s2 = null;//销毁这个实例
console.log(k);//0
下面来康康基本类型与基本包装类型有何不同
- 对基本包装类型进行typeof操作得到:object
var str = new String("pq"); console.log(typeof str);//object console.log(str instanceof String);//true
- 生存期不同:基本包装类型只是存在了执行的一瞬间,然后被立即销毁。
这又引出一个概念:不能为基本类型的数据添加属性或方法,因为添加时创建的基本包装对象会被立即销毁。如果想要为基本包装类型添加属性或方法,只能通过给基本包装对象的原型添加。