根据《面向Web开发人员的专业JavaScript》第三版,第130和131页:
var re = null,
i;
for (i=0; i < 10; i++){
re = /cat/g;
re.test("catastrophe");
}
for (i=0; i < 10; i++){
re = new RegExp("cat", "g");
re.test("catastrophe");
}
从书中:
在第一个循环中,尽管在循环的主体中指定了Regcat的实例,但它仅为/ cat /创建了一个实例。实例属性(在下一节中提到)不会重置,因此在循环中每隔两次调用test()都会失败。发生这种情况是因为在 第一次调用test(),但第二次调用从索引3(最后一个匹配项的末尾)开始搜索,但找不到。由于找到了字符串的末尾,因此对test()的后续调用再次从头开始。第二个循环每次使用RegExp构造函数创建正则表达式。由于每次迭代都会创建一个新的RegExp实例,因此对test()的每次调用均返回true。
但是,当我尝试使用firefox和Chrome时,两个循环都运行了10次。
我的代码:
var re = null,
i;
for (i = 0; i < 10; i++) {
re = /cat/g;
console.log("Loop1 -" + re.test("catastrophe"));
}
for (i = 0; i < 10; i++) {
re = new RegExp("cat", "g");
console.log("Loop2 -" + re.test("catastrophe"));
}
我的结果:
Loop1 -true 10 test.html:70:17
Loop2 -true 10 test.html:75:17
结果与上述书籍内容不同,
如何解释这些结果?