2

我在Javascript: The Good Parts by Douglas Crockford 中读到 javascript 正则表达式文字共享同一个对象。如果是这样,那么这两个正则表达式文字如何在lastIndex属性中有所不同?

var a = /a/g;
var b = /a/g;

a.lastIndex = 3;
document.write(b.lastIndex);​

JS小提琴

输出 0 而不是 3。

4

2 回答 2

3

ECMAScript 文档的第 7.8.5 节清楚地表明它们是两个不同的对象:

7.8.5 正
则表达式文字 正则表达式文字是一个输入元素,每次计算文字时都会转换为 RegExp 对象(参见 15.10)。程序中的两个正则表达式文字评估为永远不会作为 === 相互比较的正则表达式对象,即使这两个文字的内容相同。RegExp 对象也可以在运行时通过 new RegExp(参见 15.10.4)或调用 RegExp 构造函数作为函数(15.10.3)来创建。

于 2012-06-29T02:35:17.783 回答
0

因为它们是不同的对象。

document.write(a === b);

即使这个输出false

要么克罗克福德错了,要么他当时是对的,但时代变了。

我意识到这不是一个特别有用或信息丰富的答案。我只是在反驳我认为你不相信 Crockford 写的东西可能(现在)是错误的。

顺便说一句,你有没有提到那个说法?在上下文中阅读它会很有趣(我没有这本书)。

于 2012-06-29T02:28:57.523 回答