如何使用动态值来评估表达式?例如,请考虑以下示例。
var a = 5;
var b = 10;
console.log(`Fifteen is ${a + b} and not ${2 * a + b}.`);
如果 a和b是动态名称会怎么样?意味着代替a和b,它可以是类似于某些值的东西' 。怎么做下面这样的事情? (名称可以是动态的)
var 'someValue' = 1;
console.log(`*Fifteen is ${'someValue' + b}* and not ${2 * a + b}.`);
简而言之,我想评估字段名称是动态的表达式。所以我不能静态定义变量。我该如何克服这个问题?
答案 0 :(得分:3)
您可以使用bracket
表示法和this
关键字,该关键字是对窗口对象的引用。
window.name="Vicky";
window.test="test";
const message = (p0, p1) => `Hello, ${p0}. This is a ${p1}`;
console.log(message(window['name'],window['test']));
答案 1 :(得分:1)
function test() {
var a = 'Hello World',
b = 1,
c = 2,
myVarRefA = 'a',
myVarRefB = 'b',
myVarRefC = 'c';
console.log(`${eval(myVarRefA)} ${eval(myVarRefB + ' + ' + myVarRefC)}`);
}
test();

答案 2 :(得分:0)
您可以使用带有变量作为其属性的临时对象
let temp = Object.create(null);
temp["someVar"] =3;
temp["anotherVar"]=2;
console.log(temp["someVar"] + temp["anotherVar"]);
但你也可以使用更优雅的
let temp = Object.create(null);
temp.someVar =3;
temp.anotherVar=2;
console.log(temp.someVar+ temp.anotherVar);
小心你的"这个"绑定
答案 3 :(得分:0)
如果您的字段名称完全是自定义的,则可以使用Object.keys(..)
。此方法将允许您遍历对象中的属性。
Object.keys()方法返回给定对象自己的数组 可枚举的属性,与a提供的顺序相同 for ... in循环(不同之处在于for-in循环枚举 原型链中的属性也是如此。
示例 (仅显示用法)
const customObject = { name: 'Foo', age: 23, city: 'Bar City' };
const getFormatedObject = (fieldsObject) => {
const fields = {};
Object.keys(fieldsObject).forEach((fieldName, index) => {
fields[`f${index}`] = fieldsObject[fieldName];
});
return fields;
}
const formatedObject = getFormatedObject(customObject);
for (let i = 0; i < Object.keys(formatedObject).length; i++) {
console.log(formatedObject[`f${i}`]);
}
如果您知道对象上的字段数,可以使用下面的字段。
const customObject = { name: 'Foo', age: 23, city: 'Bar City' };
const keys = Object.keys(customObject);
console.log(`His ${keys[0]} is ${customObject[keys[0]]} and ${keys[1]} is ${customObject[keys[1]]} and ${keys[2]} is ${customObject[keys[2]]}`);