我有一个函数,该函数接收2个参数:一个变量和一个数据类型的字符串表示形式('String','Object'等):
function typeChecker(variable, dataType) {
// checks type, returns true or false
}
我想将第二个参数转换为构造函数,以便此表达式不会引发错误:
variable instanceof 'Date'
问题:是否可以转换以下任何一个:
'String'
'Date'
'Object'
对于这些:
String
Date
Object
最佳答案
这些构造函数都恰好是全局对象的成员(在浏览器中为window
或在Node.js中为global
),因此您可以执行以下操作之一
variable instanceof window['Date']
variable instanceof global['Date']
如果您的构造函数不作为全局对象的成员而存在,则可以检查值的原型链中是否有任何原型与
constructor
关联,该name
的instanceOf
与所需字符串匹配:function checkIfValueIsOfTypeName(value, typeName) {
while(value = Object.getPrototypeOf(value)) {
if(value.constructor && value.constructor.name === typeName) {
return true;
}
}
return false;
}
这几乎是
instanceOf
在内部进行操作的方式,除了constructor
直接将与右侧值进行比较,而不是将其名称与字符串进行比较(这是您要执行的操作)。关于javascript - 将JS对象的字符串名称转换为JS对象的实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51883314/