我刚刚了解了这些方法并尝试在谷歌上搜索它,但一无所获
'string'.match(/regex/);
/regex/.test('string');
为什么他们接受/regex/
,反之亦然'string'
?
(重新发布我的评论作为答案(
因为String
不是RegExp
,反之亦然。
如果 JavaScript 标准库在这两种情况下都使用相同的函数名称,那么它会导致混淆,因为这两种方法返回非常不同的值。
JavaScript 没有实现静态类型,因此如果不使用不同的名称match
test
读取代码的人不会知道返回值类型是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
值。