为了账号安全,请及时绑定邮箱和手机立即绑定

以下代码执行的结果是false, 为什么?

以下代码执行的结果是false, 为什么?

慕田峪9158850 2019-03-10 14:34:00
面试相关相关代码var re = /abc/g;console.log(re.test("abcd")===re.test("abcd")); // false
查看完整描述

2 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

test() called multiple times on the same global regular expression instance will advance past the previous match

因为例子中的正则带了g,所以每次调用test方法会先获取一个隐藏属性lastIndex,会跳过上次已经搜索过的部分。下次调用时,就从前一次的lastIndex开始搜索。结果搜不到,就返回false。lastIndex置为0,再下一次调用时,就又能搜到了

多次执行下面的这条语句就看明白了

console.log(re.lastIndex, re.test('abc')); // 0 trueconsole.log(re.lastIndex, re.test('abc')); // 3 falseconsole.log(re.lastIndex, re.test('abc')); // 0 true


查看完整回答
反对 回复 2019-03-10
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

正则表达式中的g, 使得搜索过程后, 如果匹配成功, 则记录上一次的位置, 如果匹配不成功, 则会归零, 所以第一次是true, 第二次是false, 判断结果为false

查看完整回答
反对 回复 2019-03-10
  • 2 回答
  • 0 关注
  • 604 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信