有没有办法检测一个 JavaScript 对象是否是一个正则表达式?
例如,我想做这样的事情:
var t = /^foo(bar)?$/i; alert(typeof t); //I want this to return "regexp"
这可能吗?
谢谢!
编辑:感谢所有的答案。看来我有两个非常好的选择:
obj.constructor.name === "RegExp"
或者
obj instanceof RegExp
任何一种方法的主要优点/缺点?
再次感谢!
您可以使用 instanceof 运算符:
var t = /^foo(bar)?$/i; alert(t instanceof RegExp);//returns true
实际上,这 几乎 与以下内容相同:
var t = /^foo(bar)?$/i; alert(t.constructor == RegExp);//returns true
请记住,由于 RegExp 不是原始数据类型,因此无法使用typeof运算符,这可能是该问题的最佳选择。
typeof
但是您可以使用上面的这个技巧或其他类似 鸭子类型 检查_的技巧,例如,检查此类对象是否具有任何重要的方法或属性,或者通过其 _内部类值 (通过 using {}.toString.call(instaceOfMyObject))。
{}.toString.call(instaceOfMyObject)