!function () {}();
当前回答
它返回语句的计算结果是否为false。如:
!false // true
!true // false
!isValid() // is not valid
您可以使用它两次将值强制为布尔值:
!!1 // true
!!0 // false
因此,为了更直接地回答您的问题:
var myVar = !function(){ return false; }(); // myVar contains true
编辑:它的副作用是将函数声明更改为函数表达式。例如,以下代码无效,因为它被解释为缺少所需标识符(或函数名)的函数声明:
function () { return false; }(); // syntax error
其他回答
它返回语句的计算结果是否为false。如:
!false // true
!true // false
!isValid() // is not valid
您可以使用它两次将值强制为布尔值:
!!1 // true
!!0 // false
因此,为了更直接地回答您的问题:
var myVar = !function(){ return false; }(); // myVar contains true
编辑:它的副作用是将函数声明更改为函数表达式。例如,以下代码无效,因为它被解释为缺少所需标识符(或函数名)的函数声明:
function () { return false; }(); // syntax error
这是编写IIFE(立即调用函数表达式)的另一种方式。
它的另一种写作方式-
(function( args ) {})()
等同于
!function ( args ) {}();
感叹号使任何函数始终返回布尔值。最后一个值是函数返回值的否定值。
!function bool() { return false; }() // true
!function bool() { return true; }() // false
省略!在上述示例中,将是SyntaxError。
function bool() { return true; }() // SyntaxError
然而,实现这一目标的更好方法是:
(function bool() { return true; })() // true
! 是一个逻辑NOT运算符,它是一个布尔运算符,可以将某个值反转为相反的值。
尽管可以通过在函数之前使用BANG(!)来绕过被调用函数的括号,但它仍然会反转返回,这可能不是您想要的。与IEFE的情况一样,它将返回undefined,当反转时,它将变为布尔值true。
如果需要,请使用右括号和BANG(!)。
// I'm going to leave the closing () in all examples as invoking the function with just ! and () takes away from what's happening.
(function(){ return false; }());
=> false
!(function(){ return false; }());
=> true
!!(function(){ return false; }());
=> false
!!!(function(){ return false; }());
=> true
其他工作的操作员。。。
+(function(){ return false; }());
=> 0
-(function(){ return false; }());
=> -0
~(function(){ return false; }());
=> -1
组合运算符。。。
+!(function(){ return false; }());
=> 1
-!(function(){ return false; }());
=> -1
!+(function(){ return false; }());
=> true
!-(function(){ return false; }());
=> true
~!(function(){ return false; }());
=> -2
~!!(function(){ return false; }());
=> -1
+~(function(){ return false; }());
+> -1
当我们进行javascript缩小时,这只是为了保存一个字节的数据。
考虑下面的匿名函数:
function (){}
为了使上述函数成为自调用函数,我们通常会将上述代码更改为:
(function (){}())
现在我们添加了两个额外的字符:(和),除了在函数末尾添加()之外,这是调用它所必需的。在缩小过程中,我们通常专注于减小文件大小。因此,我们也可以将上述函数写成:
!function (){}()
两者仍然是自调用函数,我们也保存了一个字节。我们只使用了一个字符!。
推荐文章
- 检测用户何时离开网页的最佳方法?
- 当“模糊”事件发生时,我如何才能找到哪个元素的焦点去了*到*?
- React不会加载本地图像
- 如何将Blob转换为JavaScript文件
- 在另一个js文件中调用JavaScript函数
- 如何在svg元素中使用z索引?
- 如何求一个数的长度?
- 跨源请求头(CORS)与PHP头
- 如何用Express/Node以编程方式发送404响应?
- parseInt(null, 24) === 23…等等,什么?
- JavaScript变量声明在循环外还是循环内?
- 元素在“for(…in…)”循环中排序
- 在哪里放置JavaScript在HTML文件?
- 什么时候.then(success, fail)被认为是承诺的反模式?
- 从浏览器下载JSON对象作为文件