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
之间创建任何链接。Soa=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;