如何获取 JavaScript 对象的大小?

新手上路,请多包涵

我想知道 JavaScript 对象占用的大小。

采取以下功能:

function Marks(){
  this.maxMarks = 100;
}

function Student(){
  this.firstName = "firstName";
  this.lastName = "lastName";
  this.marks = new Marks();
}

现在我实例化 student

var stud = new Student();

这样我就可以做类似的事情

stud.firstName = "new Firstname";

alert(stud.firstName);

stud.marks.maxMarks = 200;

等等

现在, stud 对象将在内存中占用一些大小。它有一些数据和更多对象。

如何找出 stud 对象占用多少内存? JavaScript 中的 sizeof() 之类的东西?如果我能在像 sizeof(stud) 这样的单个函数调用中找到它,那将是非常棒的。

我已经在互联网上搜索了几个月——找不到(在几个论坛中询问——没有回复)。

原文由 anonymous 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.9k
1 个回答

我已经重构了 原始答案 中的代码。我已经删除了递归并删除了假设存在的开销。

 function roughSizeOfObject( object ) {

    var objectList = [];
    var stack = [ object ];
    var bytes = 0;

    while ( stack.length ) {
        var value = stack.pop();

        if ( typeof value === 'boolean' ) {
            bytes += 4;
        }
        else if ( typeof value === 'string' ) {
            bytes += value.length * 2;
        }
        else if ( typeof value === 'number' ) {
            bytes += 8;
        }
        else if
        (
            typeof value === 'object'
            && objectList.indexOf( value ) === -1
        )
        {
            objectList.push( value );

            for( var i in value ) {
                stack.push( value[ i ] );
            }
        }
    }
    return bytes;
}

原文由 thomas-peter 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题