我有这样的数组件打印出Good。
console.log(nameA_componentA['abc'].aaa);
但现在我想像这样打印出来
var ccc='componentA';
console.log(nameA_+ccc['abc'].aaa);
但不幸的是,它没有工作:( 我的错误在哪里?
答案 0 :(得分:4)
虽然不推荐,但您可以在Javascript中执行此操作,而无需使用eval()
。由于全局变量是window
对象的后代,因此您可以像这样访问它们:
var ccc='componentA';
console.log(window['nameA_' + ccc]['abc'].aaa);
但使用对象/数组而不是使用此方法可能是更好的做法。
答案 1 :(得分:0)
您可以使用eval
来处理此类情况。
var nameA_componentA = {
abc: {
aaa: 'Hello World'
}
}
var ccc='componentA';
var obj = eval('nameA_'+ccc);
console.log(obj['abc'].aaa)
//console.log(nameA_+ccc['abc'].aaa);

注意:如果您可以选择重构代码以将所有此类对象包装在包装器对象中,则应该执行此操作。将eval
视为最后的手段。
var nameA_componentA = {
abc: {
aaa: 'Hello World'
}
}
var nameA_componentB = {
abc: {
aaa: 'Hello Foo'
}
}
var wrapperObj = {
nameA_componentA: nameA_componentA,
nameA_componentB: nameA_componentB
}
var ccc='componentA';
var ccc1='componentB';
console.log( wrapperObj['nameA_'+ccc]['abc'].aaa);
console.log( wrapperObj['nameA_'+ccc1]['abc'].aaa);

答案 2 :(得分:0)
您可以使用(window || context)['nameA_' + ccc].abc.aaa
const nameA_componentA = {
abc: {
aaa: 'Good'
}
}
console.log(nameA_componentA['abc'].aaa);
const ccc='componentA';
// this isn't working in the stack snippets
// console.log(window['nameA_' + ccc]['abc'].aaa);
// you are better off namespacing
const nameA = {
componentA: { abc: { aaa: 'Good' }},
componentB: { abc: { aaa: 'Great' }}
}
console.log(nameA[ccc].abc.aaa)