有没有办法检测JavaScript对象是否是正则表达式?
例如,我想这样做:
var t = /^foo(bar)?$/i;
alert(typeof t); //I want this to return "regexp"这个是可能的吗?
谢谢!
编辑:感谢您的回答。看起来我有两个非常好的选择:
obj.constructor.name === "RegExp"或
obj instanceof RegExp这两种方法都有什么主要的优缺点吗?
再次感谢!
发布于 2010-12-03 04:09:00
您可以使用instanceof运算符:
var t = /^foo(bar)?$/i;
alert(t instanceof RegExp);//returns true实际上,这几乎等同于:
var t = /^foo(bar)?$/i;
alert(t.constructor == RegExp);//returns true请记住,由于RegExp不是primitive data type,因此无法使用typeof运算符be the best option来解决此问题。
但是您可以使用上面的技巧或其他类似于检查的技巧,例如,检查这样的对象是否有任何重要的方法或属性,或者通过它的内部类值(通过使用{}.toString.call(instaceOfMyObject))。
发布于 2010-12-03 04:13:21
alert( Object.prototype.toString.call( t ) ); // [object RegExp]这是规范中提到的获取object类的方法。
来自ECMAScript 5,第8.6.2节对象内部属性和方法
[类]内部属性的值由本规范为每种内置对象定义。主机对象的[类]内部属性的值可以是除“参数”、“数组”、“布尔值”、“日期”、“错误”、“函数”、"JSON“、”数学“、”数字“、”对象“、"RegExp”和" String "中的一个以外的任何字符串值。[Class]内部属性的值在内部用于区分不同类型的对象。请注意,本规范没有为程序提供任何访问该值的方法,除非通过Object.prototype.toString (请参阅15.2.4.2)。
RegExp是在第15.10节RegExp(RegularExpression)Objects的规范中定义的一类对象
RegExp对象包含正则表达式和关联的标志。
发布于 2010-12-03 04:05:15
让.constructor属性转一转:
> /^foo(bar)?$/i.constructor
function RegExp() { [native code] }
> /^foo(bar)?$/i.constructor.name
"RegExp"
> /^foo(bar)?$/i.constructor == RegExp
truehttps://stackoverflow.com/questions/4339288
复制相似问题