javascript代码片段解释

时间:2013-10-08 20:05:28

标签: javascript

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

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

1 个答案:

答案 0 :(得分:5)

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

此表达式的第一部分确定浏览器是否在toString()中使用函数的代码,因为只有在/xyz/.test(function () { xyz; })中找到字符串true时,xyz才会给出toString()在该函数上调用/\bparent\b/的结果。

表达式的其余部分是三元组,它将导致/.*/toString(),因此整个表达式可以如下概括:“如果浏览器在{{1中使用函数的代码将fnTest设置为正则表达式/\bparent\b/,否则将fnTest设置为/.*/

如果您要使用函数执行某些操作,则可以使用此函数,但是您知道只需要对包含名为parent的变量的函数执行此操作。在支持的浏览器上,您可以使用fnTest.test(some_function)查看some_function是否包含parent,因为toString()实施fnTest.test(some_function)将导致无法做出此决定的浏览器总是返回true,因为/.*/将匹配所有字符串。