因为js中还存在一种包装类型(Number,String,Boolean)是三大基本类型对应的包装类型。包装类型是函数对象,它们上面有很多方法,可以通过关键字new来创建具体的实例。当进行a.substring(0,1)这样的操作时,显然不可能靠a这个苦逼的字符串来实现,真正的实现方式是,js在解释执行命令时,会创建一个临时的String对象,我们叫call它aa好了,aa的创建是这样的aa = new String(a);所以aa中存有a的值,然后操作aa,将结果赋值给a,结束后临时对象aa被销毁。。。可怜的龙套。这里typeof aa的类型是"object"因为js中还存在一种包装类型(Number,String,Boolean)是三大基本类型对应的包装类