2
fnTest = /xyz/.test(function () {
        xyz;
    }) ? /\bparent\b/ : /.*/;

我无法理解这个 javascript 代码片段是如何工作的。有人可以解释一下这个代码片段的逻辑吗?

4

1 回答 1

5

浏览器并不总是使用相同的toString()对函数使用相同的实现。一些浏览器会将函数中的代码作为字符串返回,而其他浏览器则不会。

这个表达式的第一部分确定浏览器是否使用函数的代码,toString()因为只有当字符串/xyz/.test(function () { xyz; })truexyz仅当在调用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)/.*/

于 2013-10-08T20:11:42.877 回答