这些字符在Javascript中做什么

What do these characters do in Javascript

本文关键字:什么 Javascript 字符      更新时间:2023-09-26

我 http://cssdeck.com/labs/bjiau4dy 在这里浏览一段代码,我在 Javascript 框中看到了这个 -

!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!

这有什么作用?为什么它不会在控制台中抛出错误?

谢谢!

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


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

function () {
    // this is a syntax error...
}();

你将收到语法错误:

语法错误:意外的令牌 (

因为你不能调用函数声明。


所以人们通常将匿名函数包装在括号中,将其转换为函数表达式:

(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-运算符也是如此。 ! 是 not 运算符,会将操作数转换为boolean(真/假)。

要记住的另一件事是,在Javascript中,一切都可以评估为某种值。这可以是"真"或"假"值,也可以有一个"数字"值(即使该值不是数字,又名NaN)。

因此,如果你打开JSFiddle或Firebug,并弄乱这些值对函数的作用,你可以看到它们也会产生某种新的返回值。

例如:

  1. !function(){}的计算结果为 false(因为将函数对象强制转换为布尔值会产生 true 的值)。
  2. +function(){}的计算结果为 NaN(因为将函数对象强制转换为数字会产生 NaN )。使用 - 可以看到相同的结果。
  3. !+function(){}产生真(强制一些值NaN将产生false而不是假产生真。
  4. !+-+-+!function(){}产生 true(因为!function(){}产生 false+false产生0,并将持续贯穿所有这些+-运算符,直到最终!0被评估为 true)。
  5. 应用示例中列出的运算符将在 false、-1、0、1 true之间来回切换,直到计算完所有运算符。

请注意,我使用Firebug检查了这些。浏览器之间可能存在差异,也许Firebug在评估中向我们展示了什么。TL;DR是Javascript做了很多类型强制,并且计算表达式的方式与声明不同。