这些字符在Javascript中做了什么?
这个问题在这里已经有了答案:
任何这些符号都会将后面的函数转换为函数表达式,而不是函数声明。 把他们放在一起只是为了好玩。
如果您尝试通过在声明后立即放置()来调用常规函数:
function () {
// this is a syntax error...
}();
你会得到一个语法错误:
SyntaxError:意外的标记(
因为你不能调用函数声明。
所以人们通常在圆括号中包含一个匿名函数,将其转换为函数表达式:
(function () {
// this will execute immediately
}());
您可以通过以下任何符号来实现相同的功能:
!function () {
// this will also execute immediately
}();
有关更多信息,请参阅此处:http://kangax.github.com/nfe/#expr-vs-decl
除了作为风格水印之外,做长符号集有零点。
该组符号充当后续功能的操作,但什么都不做。
在JS中,您可以编写1或+1(一)或!1 (假)或!+1(仍然为假)。 这只是那些对以下功能起作用的长链。
所以!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!1不会抛出错误。 它的价值虽然是false 。
和!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!function(){ ... }只是执行函数并计算为false(但是,无论如何都没有对值做任何处理)
但是,由于存在某些东西,它将函数定义转换为操作并立即评估函数。 但只是+function(){ ... }会做同样的事情。
再详细一点,这些操作符中的每一个实际上都会对操作数进行类型强制操作。 +会将后面的操作数转换为number , -操作符也是如此。 ! 是非运算符,并将操作数转换为boolean (真/假)。
还有一点需要记住的是,在Javascript中,所有东西都可以评估为某种价值。 这可能是一个“truthy”或“falsey”的值,也可能有一个“数字”值(即使该值不是数字,AKA NaN )。
所以,如果你打开JSFiddle或者Firebug,并且弄清楚这些值的作用,你可以看到它们也会产生某种新的返回值。
例如:
!function(){}将计算为false值(因为强制函数对象为布尔值会产生true值)。 +function(){}将计算为NaN值(因为强制函数对象为数字会产生NaN )。 使用-可以看到相同的结果。 !+function(){}产生true(强制许多值NaN将产生false而不是false产生true。 !+-+-+!function(){}产生true(因为!function(){}产生false , +false产生0 ,并且将继续贯穿所有这些+和-操作符,直到finally !0被计算为真) 。 false ,-1,0,1, true ,直到所有的运营商都进行了评估。 请注意,我使用Firebug检查了这些。 浏览器之间可能存在差异,也许Firebug向我们展示了评估内容。 TL; DR是Javascript执行大量类型的强制操作,并且将对表达式的评估与声明不同。
链接地址: http://www.djcxy.com/p/94931.html