【发布时间】:2011-06-15 14:58:21
【问题描述】:
我正在寻找一些 JS 的示例代码,我发现了一些使用 !function() 的东西,我想知道感叹号到底是什么?
【问题讨论】:
标签: javascript function call operator-keyword
我正在寻找一些 JS 的示例代码,我发现了一些使用 !function() 的东西,我想知道感叹号到底是什么?
【问题讨论】:
标签: javascript function call operator-keyword
! 是布尔非运算符。 !function() 将function() 的返回值转换为布尔值并返回它的相反值
【讨论】:
如果你用“函数”这个词代替函数的名称,它只是意味着“否定函数的结果”。 ! 表示不是。所以
!true == false
【讨论】:
functionname 是一个表达式(可能计算为函数对象),此计算的结果(函数对象)由() 调用,() 调用函数并计算返回值。
现在,这个返回值(它是一个表达式的结果)然后用unary ! (not) operator 取反。 ! 的规则是!truthy -> false 和!falsy -> true,其中truthy 和falsy 是涵盖"truthy and falsy" in JavaScript 的概念。
这个例子可以写成:!((functioname)()),但这太傻了
【讨论】:
试过这个:
var a = !function () {
alert("notfun");
return "nottestfun";
}
alert(a);
它会发出警报:
false
没有别的。如果你尝试运行 a(),你会得到一个类型错误:
Uncaught TypeError: Property 'a' of object [object DOMWindow] is not a function
【讨论】:
function () {}(在示例中的表达式上下文中)只是返回一个立即被否定的函数对象! (var a = !someFunctionObject) 因为一个对象是一个truthy 值,那么这与var a = false 和false() 是一样的。如果您想评估该函数并将! 应用于该函数...var a = !(function () {alert("notfun"); return "nottestfun"})(); alert(a) -- 快乐编码。
这是一个否定。所以如果function() 返回一个布尔值,! 会否定它。
不确定 JS 是如何管理命名的($ 是合法的),所以它也可能只是函数的名称:P(我已经检查过了,似乎因为 ! 是一个运算符,这是不合法的,所以这是不的可能性)。
【讨论】:
_ 和$。