我有一个函数,该函数接收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关联,该nameinstanceOf与所需字符串匹配:

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/

10-12 13:47