这个问题 问的好啊...
js 有两套 对象系统
一套 比如 "abc" 123 undefined true
这种直接量
另一套才是真正的 继承自 Object 的对象 比如 new String new Number new Boolean []即new Array {}即 new Object
/\d/ 即new RegExp
对于 字符串直接量 Number直接量 Boolean直接量 比如 "abc" 123 true
当我们在其表达式后面跟 一个 "."运算符 试图取得 对应Number String Boolean 构造器原型方法时
js引擎就会 创建一个包装对象...然后才去 改对象的构造器原型中去查找方法
举例 :
"abc".indexOf("o");//js对该表达式求解的过程如下
return
new String("abc").indexOf("o");
由于 indexOf不属于 new String 自身的方法 所以 其实是 new String("abc").__proto__.indexOf("o")
__proto__就是 维护对象和 构造器 以及原型连的 东西...当然 该属性 ie不可见 firefox可见.
整个过程就是这样
这就是为什么 有人说 ie6
"abc".length 这样直接用会导致内存泄露的原因.. 因为那个临时创建的包装对象 无法销毁 ...具体原因不明.