我有几个字符串
strings = [
"String",
"Object",
"Boolean"
]
我希望用它们来声明新对象
for(var i = 0; i < strings.length; i++){
var x = new strings[i];
}
但我得到了这个错误:
TypeError: string is not a function
at Object.<anonymous> (/Users/path/code.js)
at Object.<anonymous> (/Users/path/code.js)
at Module._compile (module.js:456:26)
如何将字符串视为基础类型?
旁白:
我知道我可以做类似
的事情type_map = {
String: String,
Object: Object,
Boolean: Boolean
}
然后去
for(var i = 0; i < strings.length; i++){
var x = new type_map[strings[i]];
}
有效,但如果存在,我正在寻找更优雅的东西。
答案 0 :(得分:3)
显而易见的是什么?
var i, x, constructors = [
String,
Object,
Boolean
];
for(i = 0; i < constructors.length; i++){
x = new constructors[i];
}
请记住,JS中的任何内容都是一个对象(包括&#34;类名&#34;),并且可以使用,但是你可以使用它。
答案 1 :(得分:1)
这些类的构造函数是全局对象的属性。
例如,在浏览器中,您可以执行
console.log(window['String'] === String); // true
var str = new window[strings[0]]();
console.log(str); // ""
答案 2 :(得分:0)
strings = [
"String",
"Object",
"Boolean"
]
for(var i = 0; i < strings.length; i++){
var x = new (eval(strings[i]));
}
总结eval("String") === [Function: String]