箭头函数...
相信您已经知道,javascript
支持箭头函数,它们非常简洁,但不幸的是无法与您的整洁的regex
一起使用。
我迅速将您漂亮的regex
转换为自己的function
,该函数以function
作为输入并返回它是否为空,以便以后更加简单。为了演示箭头函数可以广泛使用,我将其放在了一个箭头函数中:
isEmpty = f => /^function[^{]+\{\s*\}/m.test(f.toString())
现在,我们可以轻松地测试一个空函数:
function eF() {}
正如我们预期的那样,使用 isEmpty(eF)
返回 true
。
再来看一个实际函数的例子:
function retOne() {return 1
如预期一样,isEmpty(retOne)
返回false
。
然而,我遇到的问题是与箭头函数有关,因此要再次初始化一个空的箭头函数,我们有一个更短的语法:
eF = () => {}
而该字符串化版本与之前的版本相差甚远:'stringified'
"() => {}"
当然,在这种情况下调用
isEmpty(eF)
将返回
false
,而我们希望返回
true
。我不确定您是否需要测试所有函数(即包括
箭头函数
)是否为空,但如果需要,您的
正则表达式
需要进行修改...
我不擅长编写它们,但已经尝试过一些方法,您可能需要考虑
箭头函数
的宽容性质,特别是
文档中的这部分内容:
(param1, param2, …, paramN) => { statements }
(param1, param2, …, paramN) => expression
// equivalent to: (param1, param2, …, paramN) => { return expression; }
// Parentheses are optional when there's only one parameter name:
(singleParam) => { statements }
singleParam => { statements }
这里展示了花括号
{...}
并不总是必需的,因此这个函数:
retOne = () => 1
是有效的
,这可能会使形成新的正则表达式
更加困难。我想到的一个解决方法是使用以下代码从f.toString()
中删除所有花括号:
str.replace(/[{}]/g, '')
然后从那里使用正则表达式测试
。
希望这对于您希望箭头函数
也能够被测试时有所帮助。