在javascript中将原语包装为对象的开销是多少?

在javascript中将原语包装为对象的开销是多少?,javascript,gwt,Javascript,Gwt,包装基本JavaScript值使其成为对象会产生什么(如果有的话)开销 例如: > var x = Object(12); undefined > typeof x "object" > ({}).toString.call(x); "[object Number]" vs 我提出这个问题的原因是:我正在使用GWT代码,它在JavaScript和Java代码之间转换值(后来编译成JavaScript代码)。由于Java非常关心类型,而且GWT JSNI(interop方法)

包装基本JavaScript值使其成为对象会产生什么(如果有的话)开销

例如:

> var x = Object(12);
undefined
> typeof x
"object"
> ({}).toString.call(x);
"[object Number]"
vs


我提出这个问题的原因是:我正在使用GWT代码,它在JavaScript和Java代码之间转换值(后来编译成JavaScript代码)。由于Java非常关心类型,而且GWT JSNI(interop方法)支持原语和对象,我想知道为什么不直接返回“装箱”原语(例如Object(12)是12的装箱版本)


答案是我所期望的清晰速度。我没有意识到这会如此严重,但如果可以的话,显然要避免使用盒装Javascript原语,或者在性能上付出巨大代价。(需要注意的是,正如Jan提到的,方法调用的开销会改变这一点)

原语不是对象,因此它们的成本较低(参见Alex Wayne的答案)。另一方面

可以对字符串文本值调用字符串对象的任何方法JavaScript自动将字符串文本转换为临时字符串对象,调用该方法,然后丢弃临时字符串对象。还可以将String.length属性与字符串文字一起使用

所以请使用原语,但如果您想对它们调用方法,则应创建对象似乎比
var x=12慢约97%

但是,如果您打算对该号码调用一个方法,则差别要小得多,尽管不调用该号码上的
Object()
更快


但真正的问题是你为什么要这么做?您可以在没有这种显式转换的情况下对数字调用方法

var x = 12.1234;
x.toFixed(2); // "12.12"

关于原语和对象的主题有一篇很棒的文章:谢谢——但我的问题是开销是什么,而不是什么时候使用它们。正如韦恩在回答中所说,开销是巨大的。然而,若你们使用方法,若你们不创建object,那个么开销会更大。太棒了,谢谢。现在我们从不同的浏览器获取一些数据。在原语上调用方法的开销太大了,请看我的答案。
var x = 12.1234;
x.toFixed(2); // "12.12"