在最近阅读一段源码的时候发现这里的 val
竟然是数组, 对于结果依旧是正确的, 有大神可以解释解释么 ?
/**
* RegexTest / 正则匹配
* @param value
* @param params
*/
export const regexTest = (value: string[] | string, params: string[] | string | any) => {
let args = !(params instanceof Array) ? [params] : params;
let val = !(value instanceof Array) ? [value] : value;
let re = args[0];
if (!(re instanceof RegExp)) {
re = re.split('/');
re = new RegExp(re[1], re[2]);
}
return re.test(val);
}
validation.test.ts
describe('validation', function () {
describe('regex match', function () {
it('test-number', function () {
assert.equal(regexTest(['5'], /\d+/i), true);
assert.equal(regexTest('5', /\d+/i), true);
});
});
});
你的疑问是:
reg.test(val)
方法参数是一个字符串,为啥它传数组也可以?其实很简单,如果你传一个数组,它会自动调用数组的
.toString()
方法进行转换。举个例子:
因为
['my','cat'].toString() == 'my,cat'
,所以上面返回true