代码之家  ›  专栏  ›  技术社区  ›  Eduard

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

  •  1
  • Eduard  · 技术社区  · 7 年前

    我有一个函数,它接收两个参数:变量和数据类型的字符串表示(“string”、“Object”等):

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

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

    variable instanceof 'Date'
    

    问题: 是否可以转换其中任何一个:

    'String'
    'Date'
    'Object'
    

    致:

    String
    Date
    Object
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   apsillers    7 年前

    这些构造函数碰巧都是全局对象的成员(或者 window 在浏览器中或 global 在Node.js中),所以您可以执行

    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 内部运作,除了 直接比较 构造器

        2
  •  0
  •   regex    7 年前

    你可以使用

    console.log(typeof 10);
    // output: "number"
    
    console.log(typeof 'name');
    // output: "string"
    
    console.log(typeof false);
    // output: "boolean"