我有一个函数,该函数接收2个参数:一个变量和一个数据类型的字符串表示形式('String','Object'等):
function typeChecker(variable, dataType) {
// checks type, returns true or false
}
我想将第二个参数转换为构造函数,以便此表达式不会引发错误:
variable instanceof 'Date'
问题:是否可以转换以下任何一项?
'String'
'Date'
'Object'
这些:
String
Date
Object
答案 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