2013-10-08 95 views
2
fnTest = /xyz/.test(function() { 
     xyz; 
    }) ? /\bparent\b/ : /.*/; 

我不明白这个javascript代码片段是如何工作的。 有人可以解释我,这段代码的逻辑吗?javascript代码片段解释

+3

codereview.stackexchange.com –

回答

5

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

该表达式的第一部分确定是否浏览器使用在toString()函数的代码,因为只有当字符串xyz在该函数调用toString()结果发现/xyz/.test(function() { xyz; })会给true

表达的其余部分是一种三元这要么导致/\bparent\b//.*/,所以整个表达式可概括如下:“如果浏览器在toString()使用函数的代码,设置fnTest到正则表达式/\bparent\b/,否则设置fnTest/.*/

你会使用这个,如果你要执行与功能的一些操作,但是你知道,你只需要做它包含一个名为parent变量函数。在支持的浏览器可以使用fnTest.test(some_function)查看some_function是否包含parent,对于浏览器而言由于toString()执行将始终返回true,因为/.*/将匹配所有字符串,因此t无法做出此确定。