为什么 regex.exec() 返回类型是布尔值?

Ger*_*ers 3 javascript regex return-type

我对 javascript 很陌生,并且在 regex 上有问题
根据这个文档页面,如果没有匹配项,regex.exec() 函数应该返回一个数组或 null。

如果匹配成功,exec() 方法返回一个数组并更新正则表达式对象的属性。返回的数组将匹配的文本作为第一项,然后是每个匹配的捕获括号的一项,其中包含捕获的文本。如果匹配失败,exec() 方法返回 null。

为什么然后在我的代码,EXEC()的结果可以是一个布尔值

function matchHTMLsymbols(str)
  var pattern = /&|<|>|"|' /g;
  var arr;
  while ((arr = pattern.exec(str) !== null)) {
    console.log(arr);
    }
}
Run Code Online (Sandbox Code Playgroud)

mel*_*ene 6

因为arr不是 的结果exec,而是!==(应该是truefalse)的结果。

换句话说,x = y !== z解析为x = (y !== z),而不是(x = y) !== z

你可能想写

while ((arr = pattern.exec(str)) !== null) {
Run Code Online (Sandbox Code Playgroud)

反而。

  • 值得注意的是,由于所有数组都是真值,整个事情可以简化为`while(arr = pattern.exec(str))`,整个问题就消失了。 (3认同)