簡體   English   中英

JSON樹和內存分配

[英]JSON Tree & Memory Allocation

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

我的理解是,如果我更改一個人的屬性,那么這將反映在該人中,也將反映在其任何子項的父項中,因此這將表明實際對象在內存中一次保存並且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數據結構的一種方式。 從那時起,它已成為許多不同語言(不僅僅是Java語言)使用的通用數據交換結構。 您可以在此處了解更多信息: http : //www.json.org/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM