首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RegExp的typeof

RegExp的typeof
EN

Stack Overflow用户
提问于 2010-12-03 04:01:06
回答 9查看 46.8K关注 0票数 167

有没有办法检测JavaScript对象是否是正则表达式?

例如,我想这样做:

代码语言:javascript
复制
var t = /^foo(bar)?$/i;
alert(typeof t); //I want this to return "regexp"

这个是可能的吗?

谢谢!

编辑:感谢您的回答。看起来我有两个非常好的选择:

代码语言:javascript
复制
obj.constructor.name === "RegExp"

代码语言:javascript
复制
obj instanceof RegExp

这两种方法都有什么主要的优缺点吗?

再次感谢!

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-12-03 04:09:00

您可以使用instanceof运算符:

代码语言:javascript
复制
var t = /^foo(bar)?$/i;
alert(t instanceof RegExp);//returns true

实际上,这几乎等同于:

代码语言:javascript
复制
var t = /^foo(bar)?$/i;
alert(t.constructor == RegExp);//returns true

请记住,由于RegExp不是primitive data type,因此无法使用typeof运算符be the best option来解决此问题。

但是您可以使用上面的技巧或其他类似于检查的技巧,例如,检查这样的对象是否有任何重要的方法或属性,或者通过它的内部类值(通过使用{}.toString.call(instaceOfMyObject))。

票数 228
EN

Stack Overflow用户

发布于 2010-12-03 04:13:21

代码语言:javascript
复制
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对象包含正则表达式和关联的标志。

票数 24
EN

Stack Overflow用户

发布于 2010-12-03 04:05:15

.constructor属性转一转:

代码语言:javascript
复制
> /^foo(bar)?$/i.constructor
function RegExp() { [native code] }
> /^foo(bar)?$/i.constructor.name
"RegExp"
> /^foo(bar)?$/i.constructor == RegExp
true
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4339288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档