为什么 .test() 和 .match() 有相反的语法?这背后的原因是什么?



我刚刚了解了这些方法并尝试在谷歌上搜索它,但一无所获

'string'.match(/regex/);
/regex/.test('string');

为什么他们接受/regex/,反之亦然'string'

(重新发布我的评论作为答案(

因为String不是RegExp,反之亦然。

如果 JavaScript 标准库在这两种情况下都使用相同的函数名称,那么它会导致混淆,因为这两种方法返回非常不同的值。

JavaScript 没有实现静态类型,因此如果不使用不同的名称matchtest读取代码的人不会知道返回值类型是string[] | null还是bool(还要记住 JavaScript 不允许真正的函数重载(。

请参阅 regex.test V.S. string.match 以了解字符串是否与正则表达式匹配

  • String.match返回string[] | null.
  • RegExp.test返回bool.

因此,如果您看到此代码...:

function doSomething( foo, bar ) {
return foo.match( bar );
}

。然后(假设foo是一个string(,那么你知道doSomething将返回一个string[] | null值。

如果你看到这个...:

function doSomething( foo, bar ) {
return foo.test( bar );
}

。然后(假设foo是一个RegExp(,那么你知道doSomething将返回一个bool值。

最新更新