JSON Tree&内存分配

时间:2014-12-19 09:24:26

标签: javascript json

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

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

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));
  }
}

我的理解是,如果我改变一个人的属性,那么这将反映在Person中,也会反映在其任何子节点的Parent中,因此这将表明实际对象在内存和JavaScript中保存一次使用指针?我是否正确地想到这一点?

我担心这种类型的结构在内存中占用的代价很高,因为我可能会遇到这样一种情况,即我有几千种这种分层结构,可以深入几层。

1 个答案:

答案 0 :(得分:2)

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/

相关问题