在PHP中,你可以做这样惊人/可怕的事情:
$a = 1;
$b = 2;
$c = 3;
$name = 'a';
echo $$name;
// prints 1
有什么方法可以用Javascript做这样的事情吗?
例如,如果我有一个var name = '变量的名称';我可以得到一个引用的变量与名称?
在PHP中,你可以做这样惊人/可怕的事情:
$a = 1;
$b = 2;
$c = 3;
$name = 'a';
echo $$name;
// prints 1
有什么方法可以用Javascript做这样的事情吗?
例如,如果我有一个var name = '变量的名称';我可以得到一个引用的变量与名称?
当前回答
使用Object也很棒。
var a=123
var b=234
var temp = {"a":a,"b":b}
console.log(temp["a"],temp["b"]);
其他回答
只是不知道为什么一个糟糕的答案能得到这么多票。这个答案很简单,但你把它弄复杂了。
// If you want to get article_count
// var article_count = 1000;
var type = 'article';
this[type+'_count'] = 1000; // in a function we use "this";
alert(article_count);
2019
博士TL;
Eval操作符可以在它调用的上下文中运行字符串表达式,并从该上下文中返回变量; 字面对象理论上可以通过write:{[varName]}来做到这一点,但它被定义阻塞了。
所以我遇到这个问题,这里的每个人都只是玩玩,没有提出真正的解决方案。但是@阿克塞尔·海德有一个很好的接近。
解是eval。 几乎是最被遗忘的运算符。(我想大多数人都是())
Eval运算符可以在它调用的上下文中动态运行表达式。并返回该表达式的结果。我们可以使用它在函数的上下文中动态返回变量的值。
例子:
function exmaple1(){
var a = 1, b = 2, default = 3;
var name = 'a';
return eval(name)
}
example1() // return 1
function example2(option){
var a = 1, b = 2, defaultValue = 3;
switch(option){
case 'a': name = 'a'; break;
case 'b': name = 'b'; break;
default: name = 'defaultValue';
}
return eval (name);
}
example2('a') // return 1
example2('b') // return 2
example2() // return 3
注意,我总是显式地写eval将运行的表达式。 避免代码中出现不必要的意外。Eval非常强 但我相信你已经知道了
顺便说一句,如果合法的话,我们可以使用字面对象来捕获变量名和值,但我们不能将计算的属性名和属性值简写结合起来,遗憾的是,这是无效的
functopn example( varName ){
var var1 = 'foo', var2 ='bar'
var capture = {[varName]}
}
example('var1') //trow 'Uncaught SyntaxError: Unexpected token }`
在Javascript中,你可以使用所有属性都是键值对这一事实。jAndy已经提到了这一点,但我不认为他的回答显示了它是如何被利用的。
通常情况下,你不是试图创建一个变量来保存变量名,而是试图生成变量名,然后使用它们。PHP用$$var标记,但Javascript不需要,因为属性键可以与数组键互换。
var id = "abc";
var mine = {};
mine[id] = 123;
console.log(mine.abc);
给了123。通常你想要构造变量这就是为什么有间接的原因所以你也可以用另一种方式来做。
var mine = {};
mine.abc = 123;
console.log(mine["a"+"bc"]);
他们的意思是不,你不能。 没有办法完成它。 所以你可以这样做
function create(obj, const){
// where obj is an object and const is a variable name
function const () {}
const.prototype.myProperty = property_value;
// .. more prototype
return new const();
}
有一个创建函数,就像在ECMAScript 5中实现的那样。
Eval是一个选项。
var a = 1; var name = 'a'; document.write (eval ());/ / 1
警告:注意,如果您不知道自己在做什么,不建议使用eval()函数,因为它会带来多种安全问题。除非绝对必要,否则使用其他东西。有关更多信息,请参阅MDN页面的eval。