这些字符在Javascript中做了什么?

这个问题在这里已经有了答案:

  • JavaScript加上函数名称前面的3个答案

  • 任何这些符号都会将后面的函数转换为函数表达式,而不是函数声明。 把他们放在一起只是为了好玩。


    如果您尝试通过在声明后立即放置()来调用常规函数:

    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

    上一篇: What do these characters do in Javascript

    下一篇: Why do Bootstrap functions start with a + sign?