Javascript 理解获取和设置节点值

Javascript 理解获取和设置节点值,javascript,dom,Javascript,Dom,我正在更新一个文本值,我不确定为什么第一个代码块不起作用,但另一个代码块起作用。有人能给我解释一下吗?它们似乎是等价的 //不更新 newAtomicNum = 2; oldAtomicNum = document.getElementById("atomicNumber").firstChild.nodeValue; oldAtomicNum = newAtomicNum; *与*//是否更新 newAtomicNum = 2; oldAtomicNum = document.getElem

我正在更新一个文本值,我不确定为什么第一个代码块不起作用,但另一个代码块起作用。有人能给我解释一下吗?它们似乎是等价的

//不更新

newAtomicNum = 2;
oldAtomicNum = document.getElementById("atomicNumber").firstChild.nodeValue;
oldAtomicNum = newAtomicNum;
*与*//是否更新

newAtomicNum = 2;
oldAtomicNum = document.getElementById("atomicNumber");
oldAtomicNum.firstChild.nodeValue = newAtomicNum;

调用
nodeValue
而不进行设置时,它返回当前的nodeValue,而不是对属性的引用

所以一个元素看起来像

<div id="atomicNumber">test</div>

oldAtomicNum
现在包含字符串
test
,因此将变量设置为其他变量不会更新元素nodeValue

它们确实非常不同

在第一个示例中,您要更新的只是变量,
oldAtomicNum
。这与
document.getElementById(“原子数”).firstChild.nodeValue之间根本没有持久的联系。赋值(
=
)复制值,但不创建引用

请注意,这与此非常不同:

newAtomicNum = 2;
atomicNum = document.getElementById("atomicNumber").firstChild;
atomicNum.nodeValue = newAtomicNum;

…这将更新值。之所以有效,是因为在第二行,我们复制到
atomicNum
中的值是一个对象引用。然后我们在第三行使用该引用,分配给对象的一个属性。

所以我需要创建一个对节点的引用,然后才能设置它?所以你必须更改对象的值,我需要更改对它的引用,而不是当前值?@user3287384:对象有属性,属性有值。您根本不需要变量,只需执行以下操作:
document.getElementById(“atomicNumber”).firstChild.nodeValue=2要记住的关键是,当你在做像
a=b
这样的赋值时,它是一个被复制的值。您根本没有在
a
b
之间创建任何链接。So
a=2;b=a;b=3
2
留在
a
中,分配给
b
不会改变
a
中的内容@user3287384:有时人们会对对象引用(即值)产生混淆,因为它似乎会影响
b
var a={foo:2};b=a;b、 foo=4;console.log(a.foo);//4
但请注意,我们没有更改
b
<代码>b
仍然具有与原来相同的值。我们更改的是
b
中的值所引用的对象上的属性。
a
中的值也引用同一个对象,因此
a.foo
b.foo
是相同的属性。好的,让我看看我是否得到了这样的结果:您可以通过使用对对象的引用来更改对象的值,或者直接更改属性值来更改对象的属性;但不是通过使用变量(既不是引用也不是属性本身)指定新值?(这让我头疼)
newAtomicNum = 2;
atomicNum = document.getElementById("atomicNumber").firstChild;
atomicNum.nodeValue = newAtomicNum;