可能是重复问题:
函数前加叹号有什么作用?
我今天第一次看到这样格式化的函数:
!function(){}();
感叹号前面的符号有什么作用?我认为它的功能与以下代码相同:
(function(){})();
但是...这里到底发生了什么?
可能是重复问题:
函数前加叹号有什么作用?
我今天第一次看到这样格式化的函数:
!function(){}();
感叹号前面的符号有什么作用?我认为它的功能与以下代码相同:
(function(){})();
但是...这里到底发生了什么?
前面的!
会接收无法解析的语句,并使其能够被JS引擎解析,然后返回true。
function(){}();
SyntaxError: Unexpected token (
!function(){}();
>>true
这只是让JavaScript解析器将其解析为表达式,以便执行它。
!
的任何表达式一样。 - Matthew Flaschen!function(){}();
^ ^ ^
C A B
function(){}
是一个空的匿名函数()
执行函数(A),返回undefined
!
将undefined
取反,变成true
我认为他们使用这个技巧是为了进行代码高尔夫或混淆的编码。实际上采用这种方式是不好的做法。
在您的浏览器地址栏中尝试javascript:alert(!function(){}())
+function(){}();
和-function(){}();
都可以工作,因为+
和-
可以是一元运算符。然而,!
更可取,因为它只是一元运算符,而+
和-
可以是二元和一元运算符。 - Jeff Hykin