将JS对象的字符串名称转换为JS对象的实例

时间:2018-08-16 18:30:19

标签: javascript

我有一个函数,该函数接收2个参数:一个变量和一个数据类型的字符串表示形式('String','Object'等):

function typeChecker(variable, dataType) {
    // checks type, returns true or false
}

我想将第二个参数转换为构造函数,以便此表达式不会引发错误:

variable instanceof 'Date'

问题:是否可以转换以下任何一项?

'String'
'Date'
'Object'

这些:

String
Date
Object

2 个答案:

答案 0 :(得分:3)

这些构造函数都恰好是全局对象的成员(浏览器中为window或Node.js中为global),因此您可以执行以下操作之一

variable instanceof window['Date']
variable instanceof global['Date']

如果您的构造函数不作为全局对象的成员而存在,则可以检查值的原型链中是否有任何原型与constructor与所需字符串匹配的name相关联:

function checkIfValueIsOfTypeName(value, typeName) {
    while(value = Object.getPrototypeOf(value)) {
        if(value.constructor && value.constructor.name === typeName) {
            return true;
        }
    }
    return false;
}

这或多或少是instanceOf内部操作的方式,除了instanceOf直接将constructor与右边的值进行比较,而不是将其名称与字符串进行比较,这就是您所需要的想做。

答案 1 :(得分:0)

您可以使用typeof

ng-show