[英]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.