1

奇怪的真值测试结果

filter = /rob/gi
>> /rob/gi
filter.test('hey')
>> false
filter.test('rob')
>> true
true && filter.test('rob');
>> false
true && filter.test('rob') ;
>> true
(true && filter.test('rob'));
>> false
(true && filter.test('rob')) ;
>> true

可在 Firefox 和 Chrome 中重现

4

1 回答 1

4

这是因为在调用之间.test表现.exec()和维护状态(位置)

与 exec() (或与它结合使用)一样,在同一个全局正则表达式实例上多次调用 test() 将超过前一个匹配项。

所以对于'rob'输入它匹配它。然后在第二次调用时,它会尝试匹配第一次匹配后剩下的任何内容:它是一个空字符串,所以它失败并倒带。

要查看它的实际效果,请尝试匹配'robrobrob'- 将有 3 个true,然后是false.

参考:

更新

  • 在这种特殊情况下,它发生是因为您使用了g修改后的(Barmar的学分)
于 2015-05-01T00:38:03.930 回答