我在Javascript: The Good Parts by Douglas Crockford 中读到 javascript 正则表达式文字共享同一个对象。如果是这样,那么这两个正则表达式文字如何在lastIndex
属性中有所不同?
var a = /a/g;
var b = /a/g;
a.lastIndex = 3;
document.write(b.lastIndex);
输出 0 而不是 3。
我在Javascript: The Good Parts by Douglas Crockford 中读到 javascript 正则表达式文字共享同一个对象。如果是这样,那么这两个正则表达式文字如何在lastIndex
属性中有所不同?
var a = /a/g;
var b = /a/g;
a.lastIndex = 3;
document.write(b.lastIndex);
输出 0 而不是 3。
ECMAScript 文档的第 7.8.5 节清楚地表明它们是两个不同的对象:
7.8.5 正
则表达式文字 正则表达式文字是一个输入元素,每次计算文字时都会转换为 RegExp 对象(参见 15.10)。程序中的两个正则表达式文字评估为永远不会作为 === 相互比较的正则表达式对象,即使这两个文字的内容相同。RegExp 对象也可以在运行时通过 new RegExp(参见 15.10.4)或调用 RegExp 构造函数作为函数(15.10.3)来创建。
因为它们是不同的对象。
document.write(a === b);
即使这个输出false
。
要么克罗克福德错了,要么他当时是对的,但时代变了。
我意识到这不是一个特别有用或信息丰富的答案。我只是在反驳我认为你不相信 Crockford 写的东西可能(现在)是错误的。
顺便说一句,你有没有提到那个说法?在上下文中阅读它会很有趣(我没有这本书)。