将原始 JavaScript 值包装成对象会产生什么开销(如果有的话)?
例如:
> var x = Object(12);
undefined
> typeof x
"object"
> ({}).toString.call(x);
"[object Number]"
对比
> var y = 12;
undefined
> typeof y
"number"
> ({}).toString.call(y);
"[object Number]"
我问的原因:我正在使用在 JavaScript 和 Java 代码(后来编译成 Javascript 代码)之间转换值的 GWT 代码。由于 Java 非常关心类型并且 GWT JSNI(互操作方法)支持原语和对象,我想知道为什么不只返回“盒装”原语(例如 Object(12) 是 12 的盒装版本)。
答案是我所期望的明确的——速度。我没有意识到它会如此严重,但如果可以的话,显然要避免盒装的 Javascript 原语,或者在性能上付出沉重的代价。(需要注意的是,方法调用的开销会像 Jan 提到的那样翻转)