我写了一个简单的html:
<!DOCTYPE html>
<html>
<body>
<div>Hi</div>
</body>
</html>
和google chrome上的这个简单脚本:
var div = document.querySelector('div');
console.log(div.parentNode.innerHTML);
console.log("%O",div);
然后控制台打印出innerHTML和对象。
消耗对象,然后找出parentNode的值为null。
我知道parentNode是node对象的一个属性,但是这个变量里面有什么?
它是一个指针?子对象?功能
如果它是一个子对象,是否会浪费内存将另一个对象内的对象存储为成员变量?
答案 0 :(得分:3)
JavaScript没有“指针”或“子对象”。每个“对象”变量(或属性)都被视为对象的引用。
var a = 1; // a contains the value "1"
var b = {}; // b contains a reference to the newly created empty object {}
在这种情况下,.parentNode
属性仅仅是对包含HTMLBodyElement
的{{1}}对象的引用。
更多信息:
这些引用有点像C的指针,但它们完全不透明 - 您无法获得引用的任何有意义的值。但是,您可以使用<div>
运算符比较引用,以查看两个引用是否实际引用了同一个对象。
每个对象都是引用计数 - 如果没有更多引用(即没有范围内的变量或属性指向它),那么该对象可能是垃圾收集
将对象传递给函数时,实际上是在传递的引用副本。这意味着您可以在函数中访问该对象的属性,并修改该对象,但不能修改调用者对该对象的引用。
答案 1 :(得分:1)
JavaScript没有“指针”或“子对象”的概念。
parentNode
的值是表示DOM节点的对象,该节点是设置该属性的对象的父节点(如果它有一个,如果没有,则它变为{{1}而不是)。
与JS中的所有对象值一样,这将作为参考处理。