获取值,变量名存储在另一个变量中

时间:2019-08-01 16:40:34

标签: javascript eval

不使用eval ...我试图查看是否可以从一个变量获取值,该值存储在另一个变量中。例如从varA获取“ ValueC”的值,其中varA ='varB'和varB ='ValueC'

用户将输入一个字符串,下面模拟为名为“ UserSpecified”的变量。他们可以输入任何字符,如果不匹配现有变量,那么我就返回null。

我意识到我可以使用eval()来做到这一点,但是我试图以一种更好的方式来评估evals似乎对此皱了眉头。

我已经尝试过"Variable" variables in Javascript?所接受的ES2015 +答案,但没有成功。我错过了什么还是应该坚持评估?

let a  = "aye";
let b = "be";
let c = "sea";

let userSpecified="a";
let obj = {userSpecified};
let parm='userSpecified';

console.log(eval(userSpecified));  // This displays 'aye'

console.log(obj[parm]); // This displays 'a' but I would like it to display 'aye'

2 个答案:

答案 0 :(得分:0)

如果您可以重组代码以使一个对象保存值,那么它只是基本的 obj.key = val 语法(完全是:obj [key] = val )。

const obj = {
  a: "aye",
  b: "be",
  c: "sea"
}

const userSpecified = "a";

console.log(obj[userSpecified]); // expected: aye

否则,请使用 var 代替 let

// pay attention that it's var not let
var a = "aye";

let userSpecified = "a";

console.log(window[userSpecified]) // expected: aye

答案 1 :(得分:0)

无法动态获取局部变量的值(除eval之外)。

但是您可以使用一个对象来存储数据(而不是局部变量的名称),并使用动态键访问该数据。

我想这就是你想要的:

const data = {
  a: "1",
  b: "2",
  c: "3",
}

// Take the name of an object property and return its corresponding value.
function getValue(userSpecified) {
  return data[userSpecified]
}

console.log(getValue("a")) // 1
console.log(getValue("b")) // 2

console.log(getValue(someFormField.value))