在JavaScript中,在对象上装箱每个数字和字符串的性能成本是多少

In JavaScript, what are the performance costs of boxing every number and string on objects?

本文关键字:字符串 性能 多少 数字 JavaScript 对象      更新时间:2023-09-26

我正在JavaScript上编程一种类似Lisp的语言,用于学习目的。每个对象都是树的一部分,所以它必须跟踪其父对象。唯一的问题是数字和字符串:

foo = {};
var a = 1;
a.parent = foo;

这是行不通的。我不得不这样做:

foo = {};
var a = {type:'number',value:1,parent:foo}

所以我必须把我语言中的每个数字和字符串都框成这样的散列。我假装对所说的语言做了一些广泛的矩阵运算,所以我很担心。这种方法会影响性能吗?

如Reid所建议:

function number(n){
    return {type:'number',parent:undefined,value:n};
}
function sum(a,b){
    return {type:'number',parent:undefined,value:a.value+b.value};
}
var i = number(0);
for (var t=Date.now(); Date.now()-t < 1000;){
    var i=sum(i,number(1));}
console.log('Operations with boxing: ',i.value);
var i = 0;
for (var t=Date.now(); Date.now()-t < 1000;){
    var i=i+1;}
console.log('Operations without boxing: ',i);

输出:

Operations with boxing: 1911258
Operations without boxing: 16805783

这可能回答了这个问题。我想知道是否有一种替代方案不会在表演上大受欢迎。