fnTest = /xyz/.test(function () {
xyz;
}) ? /\bparent\b/ : /.*/;我不明白这个javascript代码片段是如何工作的。有人能解释一下这个代码片段的逻辑吗?
发布于 2013-10-08 20:11:42
浏览器并不总是对函数使用相同的toString()实现。有些浏览器会以字符串的形式从函数中返回代码,而其他浏览器则不会。
该表达式的第一部分确定浏览器是否在toString()中使用该函数的代码,因为只有在对该函数调用toString()的结果中找到字符串xyz时,/xyz/.test(function () { xyz; })才会给出true。
表达式的其余部分是三元的,将导致/\bparent\b/或/.*/,因此整个表达式可以概括如下:“如果浏览器在toString()中使用函数的代码,则将fnTest设置为Regexp /\bparent\b/,否则将fnTest设置为/.*/。
如果要使用函数执行某些操作,则可以使用此方法,但您知道,只需要对包含名为parent的变量的函数执行此操作。在受支持的浏览器上,您可以使用fnTest.test(some_function)查看some_function是否包含parent,对于由于toString()实现fnTest.test(some_function)而无法做出此决定的浏览器,fnTest.test(some_function)总是返回true,因为/.*/将匹配所有字符串。
https://stackoverflow.com/questions/19257278
复制相似问题