JS文字形式和构造方法之间的区别(创建新实例)

时间:2019-07-08 09:51:18

标签: javascript regex constructor

根据《面向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

结果与上述书籍内容不同,
如何解释这些结果?

0 个答案:

没有答案