获取对JavaScript属性的直接引用

获取对JavaScript属性的直接引用,javascript,reference,pass-by-reference,Javascript,Reference,Pass By Reference,在回答之后,我开始怀疑是否有一种方法可以更符合OP的想法 问题是:当对象的属性是基元类型时,我们能直接引用该属性吗 例如,如果您有一个名为myDiv的对象,您可以获取对其style属性的引用,因为这是一个对象,但是是否有任何方法可以获取对style的top属性的引用,以便在该属性发生更改时,您不必一次又一次地检索它?(注意:我并不是说这个检索在计算上有意义。这只是一个关于什么是可能的问题,而不是什么是好的实践。) 有没有一种方法可以直接引用top属性而不必经过样式?我的直觉是否定的,但是JS以前

在回答之后,我开始怀疑是否有一种方法可以更符合OP的想法

问题是:当对象的属性是基元类型时,我们能直接引用该属性吗

例如,如果您有一个名为
myDiv
的对象,您可以获取对其
style
属性的引用,因为这是一个对象,但是是否有任何方法可以获取对
style
top
属性的引用,以便在该属性发生更改时,您不必一次又一次地检索它?(注意:我并不是说这个检索在计算上有意义。这只是一个关于什么是可能的问题,而不是什么是好的实践。)


有没有一种方法可以直接引用
top
属性而不必经过
样式
?我的直觉是否定的,但是JS以前让我很惊讶,所以我只是想确定。

否。变量只是可以保存值的简单容器。为变量指定新值可以永远不会更改另一个变量或属性的值


在这方面,变量是保存原语值还是对象并不重要,变量就是这样工作的。

否。变量只是可以保存值的简单容器。为变量指定新值可以永远不会更改另一个变量或属性的值


在这方面,变量是保存原语值还是对象并不重要,变量就是这样工作的。

不,没有。原语是不可变的,从不通过引用存储

来自MDN

对象引用 指向对象的链接。对象引用可以像它们链接到的对象一样使用。将同一对象指定给多个属性时,会出现对象引用的概念。每个指定的特性不包含对象的副本。相反,它们保存链接到同一对象的对象引用。实际上,这意味着如果修改了对象,则引用该对象的所有特性都会反映修改

原语,原语值 不是对象且没有任何方法的数据。JavaScript有5种基本数据类型:字符串、数字、布尔值、空、未定义。除null和undefined外,所有原语值都具有环绕原语值的对象等价物,例如字符串对象环绕字符串原语所有原语都是不可变的


不,没有。原语是不可变的,从不通过引用存储

来自MDN

对象引用 指向对象的链接。对象引用可以像它们链接到的对象一样使用。将同一对象指定给多个属性时,会出现对象引用的概念。每个指定的特性不包含对象的副本。相反,它们保存链接到同一对象的对象引用。实际上,这意味着如果修改了对象,则引用该对象的所有特性都会反映修改

原语,原语值 不是对象且没有任何方法的数据。JavaScript有5种基本数据类型:字符串、数字、布尔值、空、未定义。除null和undefined外,所有原语值都具有环绕原语值的对象等价物,例如字符串对象环绕字符串原语所有原语都是不可变的


我也想说不…对象赋值仅仅是引用-但是
top
属性将赋值并保留itI我也想说不…对象赋值仅仅是引用-但是
top
属性将赋值并保留itI我不同意您答案中的原语部分。如果变量引用对象,则另一个变量可以更改两个变量引用的同一对象<代码>变量a=b={a:1};a、 a=2;console.log(b.a)我从未否认过这一点。但这并不是给变量赋值。即读取变量值并对其(对象)进行变异。我说的是
vara=b={a:1};a=2;控制台日志(b),这是OP在这里尝试做的。我知道,定义指针和引用很难。但是我想知道你的意思,就像C++一样,你有对变量的实际引用,而不仅仅是对实际数据的内存地址。在JS中,对同一事物有两个引用的唯一方法是通过一个对象(而不是一个原语),正如我在回答中所指出的。或也许我的回答有点含糊。我不是说原始值或对象之间没有区别。我的意思是,不管变量有什么值,给它分配一个新值不会改变另一个变量。“给[一个变量]分配一个新值不会[本身]改变另一个变量。”说得好。我想这回答了我的问题。我不同意你答案中的原始部分。如果变量引用对象,则另一个变量可以更改两个变量引用的同一对象<代码>变量a=b={a:1};a、 a=2;console.log(b.a)
我从未否认过这一点。但这并不是给变量赋值。即读取变量值并对其(对象)进行变异。我说的是
vara=b={a:1};a=2;控制台日志(b),这是OP在这里尝试做的。我知道,定义指针和引用很难。但是我想知道你的意思,就像C++一样,你有对变量的实际引用,而不仅仅是对实际数据的内存地址。在JS中,对同一事物有两个引用的唯一方法是通过一个对象(而不是一个原语),正如我在回答中所指出的。或也许我的回答有点含糊。我不是说原始值或对象之间没有区别。我的意思是它会被破坏
var myDiv = document.getElementById('myDiv');

myDiv.style.top = "100px";
var myDivStyle = myDiv.style;
var myDivStyleTop = myDiv.style.top;

myDiv.style.top = "200px";
console.log(myDivStyle.top); // will print "200px"
console.log(myDivStyleTop); // will obviously print "100px"