可能重复:
What does the exclamation mark do before the function?
我今天第一次看到了这样一个格式化的函数:
!function(){}();
前面的感叹号是什么?我认为它的功能与:
相同(function(){})();
但是......这里发生了什么?
答案 0 :(得分:43)
前面的!
接受un-parseable语句,并允许JS引擎解析它,然后返回true。
function(){}();
SyntaxError: Unexpected token (
!function(){}();
>>true
答案 1 :(得分:13)
它只是让JavaScript解析器将其解析为表达式,这是执行它所必需的。
答案 2 :(得分:12)
我试过了,它回归正确。
该函数返回undefined
,!undefined
为真。
!function(){}();
^ ^ ^
C A B
function(){}
是一个空的匿名函数()
执行函数(A),返回undefined
!
否定undefined
,后者变为true
我认为他们将这个技巧用于代码高尔夫或混淆代码。
实际使用是一种不好的做法在浏览器地址栏中尝试javascript:alert(!function(){}())