javascript - JSON 树和内存分配

标签 javascript json

在 JavaScript 中,如果我创建一个对象,我的理解是它本质上表示为 JSON,如果这个对象在其父对象上有一个句柄,而父对象在子对象上有一个句柄,那么如何这保存在内存中(它是指针吗?还是 JSON 的重复)。

例如,如果我构造一个 Person 对象,如下所示,其中每个 Person 可能有多个 child ,并且也有其父对象的句柄。

var Person = function(json, parent) {
  this.name = json.name;
  this.parent = parent;
  this.children = new Array();
  if(json.children) {
    for(var i=0; i < json.children.length; i++) {
      this.children.push(new Person (json. children[i], this));
  }
}

我的理解是,如果我更改一个人的属性,那么这将反射(reflect)在 Person 中,也会反射(reflect)在其任何子项的 Parent 中,因此这表明实际对象只在内存和 JavaScript 中保存一次使用指针?我这样想对吗?

我担心这种类型的结构在内存中的存储成本很高,因为我可能会遇到这样的情况,即我有几千个这种类型的层次结构,可以深入几层。

最佳答案

JSON 是一种文本格式,用于以纯文本格式表示 javascript 对象。

Javascript 中的 Javascript 对象本身根本不是 JSON。它们是某种取决于 Javascript 实现的内部格式,是良好的运行时性能和高效大小之间的平衡。当一个对象包含对 Javascript 中另一个对象的引用时,这不是该对象的副本。您可以将其视为指向其他对象的指针,并且它很可能是实现内部的某种指针,但这取决于实现。关键在于它像指针一样工作。

一个简单的 Javascript 实验表明,当您将一个对象分配给多个变量时,只有一个数据副本(因此使用指向一组数据的指针):

var x = {counter: 2};
var y = x;
x.counter = 10;
console.log(x.counter);   // 10
console.log(y.counter);   // 10

JSON 是在 Javascript 本身很久之后发明的,作为一种在不同进程、应用程序或计算机之间交换 Javascript 数据结构的方法。从那时起,它已成为许多不同语言使用的通用数据交换结构,而不仅仅是 Javascript。您可以在这里阅读更多相关信息:http://www.json.org/ .

关于javascript - JSON 树和内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27562963/

相关文章:

java - Hibernate 和 JSON - 循环依赖有明确的解决方案吗?

javascript - IE 上的 Canvas 透明度

JavaScript 数组迭代 - MDN 示例

JavaScript 在 jQuery 创建的内容中无法正常工作

html - 我需要一个数据库来处理我的网站内容吗?

json - 在 Azure 中处理 JSON

javascript - JSON 对象被视为字符串

javascript - d3 的过渡和动画是否使用 requestAnimationFrame?

javascript - 您如何管理每个 View 的 CSS 文件列表?

python - 将请求中的 JSON 数据转换为 Pandas DataFrame