blah('A');
function blah(letter){
arrayA.push('something');
}
我想将某些内容推送到一个数组,该数组的名称为'array'加上要传递给它的字母。
我可以很好地解决“ arrayA”问题:
console.log('array'+ ${letter}
)
但是,如果我尝试构建数组名称,则相同的逻辑将不起作用:
数组${letter}
。push('something')
答案 0 :(得分:0)
在浏览器中(全局对象,函数和变量成为窗口对象的成员),您可以使用方括号表示法创建和访问动态命名的对象。 您在寻找这样的东西吗?
function blah(letter){
window['array' + letter] = [];
window['array' + letter].push('something');
}
blah('A');
此后,您可以照常访问和使用新创建的数组(arrayA)。
arrayA.push('something else');
在节点中,您可以使用global
而不是window
来实现。
答案 1 :(得分:0)
尝试一下,然后忘记它(或将3次出现的window
替换为global
,以进行node.js的测试)
function test(name,value){
if(!window["array"+name])
window["array"+name]=[];
window["array"+name].push(value);
}
try{console.log(arrayA);}catch(e){console.log("arrayA missing: "+e);}
test("A",10);
try{console.log(arrayA);}catch(e){console.log("arrayA missing: "+e);}
test("A",20);
try{console.log(arrayA);}catch(e){console.log("arrayA missing: "+e);}
window
是浏览器中的全局作用域,通常,您没有充分的理由不应该依赖全局变量。他们缺乏背景(这就是为什么它们是“全球性”的),使得很难说出它们属于什么,它们是什么以及它们来自何处。大多数编程范例都建议这样做。
这也可以在node.js中使用,只是它具有global
作为全局上下文,您可以将此代码段粘贴到https://www.tutorialspoint.com/execute_nodejs_online.php中作为测试,替换3个window
-s,它将起作用(当然,您也可以将其包装到适当的模块中,这只是更多工作)。上面针对全局变量的用法所写的内容对于node.js仍然适用。不要使用全局上下文,尤其是在开发模块时。
但是,该语法也可以代替任何对象使用window
,并且认为可以:
var obj={};
console.log(obj.something);
obj['some'+'thing']=10;
console.log(obj.something);
因此,您可以自由地拥有自己的“上下文”对象(如果您在模块的顶层编写var obj={};
行,则该代码将在该模块的任何位置可用,并且不会干扰外部),并使用这种类似于数组的语法(obj['something']
创建/访问其成员,并在需要时动态构建名称。