通过文本别名引用Javascript变量
是否可以通过文本别名引用JavaScript变量?例如:通过文本别名引用Javascript变量,javascript,Javascript,是否可以通过文本别名引用JavaScript变量?例如: var x = 2; var y = convertToVariableRef("x"); 调用上述函数后: “y将是与x相同的引用,而不仅仅是将x的值复制到y” 调用上述函数后,y将是与x相同的引用,而不仅仅是将x的值复制到y中 不,JavaScript没有这种意义上的变量引用 最好使用对象和属性: var obj = {x: 2}; var yobj = obj; consoel.log(yobj.x); // 2 yobj和ob
var x = 2;
var y = convertToVariableRef("x");
调用上述函数后:
“y
将是与x
相同的引用,而不仅仅是将x
的值复制到y
”
调用上述函数后,y将是与x相同的引用,而不仅仅是将x的值复制到y中
不,JavaScript没有这种意义上的变量引用
最好使用对象和属性:
var obj = {x: 2};
var yobj = obj;
consoel.log(yobj.x); // 2
yobj
和obj
都引用上述内存中的同一对象,并且该对象具有x
属性。因此,通过任何一个引用修改x
,都会更新该对象
为什么我在上面说“JavaScript没有对变量的引用”(从这个意义上说):JavaScript的闭包接收对隐藏对象的隐式引用,称为变量绑定对象,该对象反过来引用变量。因此,从这个意义上说,JavaScript引用了变量(通过隐藏对象间接引用)。但是您无法获取对隐藏对象的引用,因此它对您描述的内容没有帮助。对于对象和数组,两个变量可以指向同一个对象或数组,但是对于数字或布尔值等简单值,javascript中没有办法让两个变量指向同一个基本值 可以将基元值包装到对象中,并通过这种方式解决问题
var x = {val: 2};
var y = x; // now both y and x point to the same object
x.val = 3;
console.log(x.val); // 3
console.log(y.val); // 3 (same value)
并且,对于属性名称,您还可以使用字符串名称访问属性,如中所示:
var x = {val: 2};
var y = x; // now both y and x point to the same object
console.log(y["val"]); // 2
1) 如果变量的值是基元(数字、布尔值、字符串),则无法获取对它的引用。你只能复制它
2) 即使变量不是原语,而是附加到当前范围(即,使用var声明,如您的示例中所示),这也是不可能的(有两个例外)
因此,可以工作的情况是一个非原语,它是当前范围之外的其他对象的一部分。像这样:
var obj = { a: [1,2,3], b: 42 };
var copyOfA = obj.a;
// do something to copyOfA
copyOfA.splice(1);
// now this has changed!
console.log(obj.a);
这两个例外是:
- 使用eval(不是很习惯用法)
- 如果当前范围是全局范围(通常不是全局范围,因为您不是全局范围) 让一切都全球化,对吗?)
var x = {value: 2};
var y = x;
只需使用
x.value
或y.value
即可。如果您声明了一个不在任何函数范围内的对象,它是window对象的属性,那么您可以像这样获取它的引用
function convertToVariableRef (ref) {
return window[ref];
}
var x = 2;
var y = convertToVariableRef("x");
但它只复制基本体的值,而只引用非基本体
var x = [1];
var y = convertToVariableRef("x");
y[0] = 2;
// log: x --> [2]
数组、对象等是非基本体
var x = [1];
var y = convertToVariableRef("x");
y[0] = 2;
// log: x --> [2]
您可以继续创建对象反射并为其指定属性
var reflect = new Object();
reflect.x = 2;
var y = reflect["x"];
Fiddle:在JavaScript中,有一个函数计算
x
,并将值赋给y
在求值过程中是否可能出现重复“y将与x相同的引用”
?这就是我没有发布答案的原因。@GrijeshChauhan:谢谢。在我完全清醒之前回答问题所得到的。我已经改正了。嗯,这取决于你怎么想。JavaScript中的所有变量都是引用(除了那些引用原语的变量)。@Jakob:variables不是引用;变量包含值,在对象引用的情况下,该值是对对象的引用。但这与引用变量是完全不同的。@T.J.Crowder:对,这样的措辞更好!不过,我认为没有人要求“引用变量”。问题是“y如何与x相同”,这正是每当你做y=x
(只要右手边不是原语)时所发生的情况。这是迄今为止最简单、最雄辩的方法。它非常适合于需要引用jQuery提取的html中间接嵌入的变量的情况<代码>变量y=反映[“x”]代码>复制值,而不是引用。请参阅@JustAPoring:您可以使用此黑客:。这不是一个好的解决方案,但这取决于你的使用情况。