先看一个简单的例子:
1 | var str = "corlymeng.com"; |
在第二行我们输出str的类型是:字符串,但是我们发现str可以调用charAt、indexOf等方法。这时我们有一个疑问:字符串是一个基本类型,它怎么可能拥有方法呢? 只有对象类型的才可以调用方法。
包装对象基本类型都有自己对应的包装对象:String、Number、Boolean。
1 | var str = new String("corlymeng.com"); |
现在我们来解释上面的例子:当str调用charAt方法的时候,基本类型会找到对应的包装对象类型,然后包装对象把所有的属性和方法给了基本类型,然后包装对象消失。
现在我们想给字符串添加一个方法,我们该如何添加呢?
1 | var str = "corlymeng.com"; |
因此当我们想给基本类型添加方法时,就要添加到基本类型所对应的包装对象上。
下面我们来看一个面试题:
1 | var str = "corlymeng.com"; |
为什么会输出undefined呢?
第二行给基本类型添加属性的时候,基本类型就会找到对应的包装对象类型,然后创建一个对象,把number = 10属性添加到创建的对象下,由第三行输出的是string,我们可以知道此时包装对象就消失了。
当第四行去调用number时,它又去创建了一个对象,但新创建的对象并没有number属性。