为什么我的 Javascript 中的两个正则表达式文本在一个属性上有所不同
Why do two regex literals in my Javascript vary on a property?
我在 Douglas Crockford 的 Javascript: The Good Parts 中读到,javascript 正则表达式文字共享同一个对象。如果是这样,那么为什么这两个正则表达式文本在lastIndex
属性中有所不同?
var a = /a/g;
var b = /a/g;
a.lastIndex = 3;
document.write(b.lastIndex);
JS小提琴
输出 0 而不是 3。
ECMAScript 文档的第 7.8.5 节非常清楚地表明它们是两个不同的对象:
7.8.5 正则表达式文字
正则表达式文本是每次计算文本时转换为 RegExp 对象的输入元素(请参阅 15.10)。程序中的两个正则表达式文本的计算结果为正则表达式对象,即使两个文本的内容相同,这些对象也不会相互比较为 ===。RegExp 对象也可以在运行时由新的 RegExp(参见 15.10.4)或调用 RegExp 构造函数作为函数 (15.10.3) 创建。
因为它们是不同的对象。
document.write(a === b);
即使这样输出false
.
要么克罗克福德错了,要么他当时是对的,但时代变了。
我意识到这不是一个特别有用或信息丰富的答案;我只是在反驳我认为你不相信克罗克福德写的东西可能是(现在)错误的。
顺便问一下,你有关于这种说法的参考吗?在上下文中阅读它会很有趣(我没有这本书)。
相关文章:
- AngularJS:如何用同一对象的另一个属性访问一个属性
- 如何为下拉列表的每个选项添加一个属性
- 如果另一个属性相同,请删除该属性
- Knockout observable没有观察到其中一个属性
- 检查来自不同数组的两个元素的一个属性是否相等
- 我想从使用onkeypress事件的文本区域获取一个属性
- ..的Javascript..循环中的对象没有在最后一个属性上运行
- 节点发布错误对象的第一个“属性”
- 如何在 XML 中搜索特定属性以检索另一个属性
- Angular JS如何观看“;只有一个属性”;
- 如果我们使用:运算符在函数内部定义一个属性,会发生什么
- AngularJS ng通过对象中的一个属性和一个文本框重复筛选
- 如何检索上一个属性的名称属性
- 如何使用jQuery只删除一个属性值而不删除另一个
- JavaScript-获取一个属性'的值
- 在ember.js记录上使用toJSON,将其中一个属性设置为null
- 如何在集合中指定模型的一个属性
- 基于一个属性Javascript检索多个对象
- 是否可以在材质ui中只更改样式道具中的一个属性
- 使用jquery从xml中选择一个属性