fnTest = /xyz/.test(function () {
xyz;
}) ? /\bparent\b/ : /.*/;
我无法理解这个 javascript 代码片段是如何工作的。有人可以解释一下这个代码片段的逻辑吗?
fnTest = /xyz/.test(function () {
xyz;
}) ? /\bparent\b/ : /.*/;
我无法理解这个 javascript 代码片段是如何工作的。有人可以解释一下这个代码片段的逻辑吗?
浏览器并不总是使用相同的toString()
对函数使用相同的实现。一些浏览器会将函数中的代码作为字符串返回,而其他浏览器则不会。
这个表达式的第一部分确定浏览器是否使用函数的代码,toString()
因为只有当字符串/xyz/.test(function () { xyz; })
true
xyz
仅当在调用toString()
该函数
表达式的其余部分是一个三元组,结果要么是/\bparent\b/
or /.*/
,所以整个表达式可以总结如下:“如果浏览器使用函数的代码 in toString()
,则设置fnTest
为 Regexp /\bparent\b/
,否则设置fnTest
为/.*/
.
如果您要对函数执行一些操作,您会使用它,但您知道您只需要对包含名为 的变量的函数执行此操作parent
。在受支持的浏览器上,您可以使用fnTest.test(some_function)
查看是否some_function
包含,对于由于实现parent
而无法做出此决定的浏览器将始终返回 true,因为将匹配所有字符串。toString()
fnTest.test(some_function)
/.*/