为什么 Chrome 的控制台显示/(?:)/
对于 RegExp 的原型?
console.log(RegExp.prototype);
console.log(/a/.__proto__);
这是特定于实现的吗? IE 正在显示//
.
这只是出于好奇而提出的问题。当我遇到这个问题时,我试图查看javascript中正则表达式的所有原型方法。当然,我找到了查找这些方法的其他方法,但这让我想知道为什么会显示这个结果。
我希望这个问题以前没有被问过——在 Stackoverflow 上没有找到任何东西。谢谢!
规范中的相关部分
RegExp 原型对象本身就是一个正则表达式对象;它是
[[Class]] 是“RegExp”。 RegExp 原型的初始值
对象的数据属性 (15.10.7) 的设置就像该对象是
由表达式 new RegExp() 创建,其中 RegExp 是该标准
具有该名称的内置构造函数。
然后我们去new RegExp() section,这与使用空字符串调用它相同。现在我们有空的正则表达式对象作为原型。
字符串表示形式被定义为:
返回由字符串“/”连接而成的字符串值,
此 RegExp 对象的源属性的字符串值和“/”;
如果全局属性为真则加“g”,如果ignoreCase则加“i”
属性为 true,如果多行属性为 true,则为“m”。
注意返回的字符串具有正则表达式文字的形式
其计算结果为另一个具有相同行为的 RegExp 对象
这个物体。
最终归结为.source
财产(在新的正则表达式部分),这是定义的实现,只要它用作正则表达式时行为相同:
令 S 为与 P 等价的 Pattern 形式的 String,其中
某些字符按如下所述进行转义。 S 可能是也可能不是
与 P 或图案相同;然而,内部程序将
将 S 评估为模式的结果必须与
由构造对象的 [[Match]] 给出的内部过程
内部财产。
Since new RegExp("(?:)")
and new RegExp("")
行为相同,chrome 和 IE 都正确遵循规范。规范甚至提到了这种具体情况作为示例:
如果 P 是空字符串,则可以通过让 S 来满足此规范
是 ”(?:)”
Chrome 的方式可以被认为是“更好”,因为它似乎也可以作为正则表达式文字工作:/(?:)/
是一个有效的正则表达式文字,而//
开始一行注释。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)