在PHP中,你可以做这样惊人/可怕的事情:

$a = 1;
$b = 2;
$c = 3;
$name = 'a';
echo $$name;
// prints 1

有什么方法可以用Javascript做这样的事情吗?

例如,如果我有一个var name = '变量的名称';我可以得到一个引用的变量与名称?


当前回答

最简单的解决方案:创建一个对象数组,每个对象都有两个字段(variableName,variableValue)

let allVariables = [];

for (let i = 0; i < 5; i++)
    allVariables.push({ variableName: 'variable' + i, variableValue: i * 10 });

for (let i = 0; i < allVariables.length; i++)
    console.log(allVariables[i].variableName + ' is ' + allVariables[i].variableValue);

输出:

variable0 is 0
variable1 is 10
variable2 is 20
variable3 is 30
variable4 is 40

console.log(allVariables) json :

 [
    {
        "variableName": "variable0",
        "variableValue": 0
    },
    {
        "variableName": "variable1",
        "variableValue": 10
    },
    {
        "variableName": "variable2",
        "variableValue": 20
    },
    {
        "variableName": "variable3",
        "variableValue": 30
    },
    {
        "variableName": "variable4",
        "variableValue": 40
    }
]

其他回答

a = 'varname';
str = a+' = '+'123';
eval(str)
alert(varname);

试试这个…

虽然这有一个公认的答案,但我想补充一个观察:

在ES6中使用let无效:

/*这不是工作*/ let t = "skyBlue", M = "黄金", B = "番茄"; Let color = window["b"]; console.log(颜色);

但是使用var是可行的

/*这个正在工作*/ var t = "skyBlue", M = "黄金", B = "番茄"; Let color = window["b"]; console.log(颜色);

我希望这对一些人有用。

在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"]);

这是一个纯javascript解决方案,它不依赖于运行时环境的全局this。使用对象解构实现简单。

const dynamicVar = (nameValue, value) => {
    const dynamicVarObj = {
        [nameValue]: value
    }
    return dynamicVarObj;
}

const nameToUse = "myVar";
const value = 55;

const { myVar } = dynamicVar(nameToUse, value);

console.log(myVar); // prints 55

他们的意思是不,你不能。 没有办法完成它。 所以你可以这样做

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中实现的那样。