【问题标题】:Many people write `javascript:void(0)` instead of `javascript:void 0` in hrefs. Do the parentheses do anything?许多人在 hrefs 中写 `javascript:void(0)` 而不是 `javascript:void 0`。括号有什么作用吗?
【发布时间】:2012-12-01 13:20:12
【问题描述】:

我看到人们一直在写void(0),但我不明白为什么人们使用括号。据我所知,他们没有目的。 void 不是函数,而是运算符。那么人们为什么要使用括号呢?他们有目的吗? Even on MDN the parens are used.

【问题讨论】:

  • +1,很有趣。确实,为什么不void 42
  • 即使你提供的the linkvoid 0void(0) 是等价的。
  • 一元文本运算符对很多程序员来说看起来很奇怪。如果它是更大表达式的一部分,那么括号控制优先级,是吗?例如无效 (1+2)
  • @Cameron 那将是一个额外的字节。
  • 那么,为什么不void 1void 7

标签: javascript


【解决方案1】:

我不得不承认,我过去曾多次使用过相同的构造,主要是因为我已经看到它在其他网站上使用过。我不再使用它,因为不显眼的 JavaScript 比内联 JavaScript 更受欢迎;事实上,它几乎专门用于内联以确保页面不会刷新。

话虽如此,正如您正确指出的那样,它是一个运算符而不是一个函数;它仍然有效的原因仅仅是因为 (0)0 是同一个东西,所以这就是它的评估方式:

void (0);

等同于:

void 0;

我猜它被写成函数调用的原因是因为人们在使用内联函数时感觉更舒服:)

<a href="javascript:void 0">...</a> // hold on, that can't work, can it?!

<a href="javascript:void(0)">...</a> // ahhh, normality restored

【讨论】:

    【解决方案2】:

    “那么人们为什么要使用括号呢?”

    人们做傻事。

    “它们是否有目的?”

    不,不需要它们。

    【讨论】:

      【解决方案3】:

      link 为您解释。

      澄清的一件事是 void 是一个运算符(不是函数)。因为这个 void(0) 在技术上是不正确的,尽管在实践中 实现允许它以这种方式使用它应该在没有的情况下使用 括号例如无效0。

      所以使用void(0) 在技术上是错误的,但实际上 void 有两种不同的语法:

      void (expression)
      void expression
      

      MDN 已经告诉你,虽然没有明确说明这两种语法,但它在技术上并不正确。

      礼貌:

      【讨论】:

      • () 不是void 运算符语法的一部分,就像+ 在此表达式中一样:void +0es5.github.com/#x11.4
      • @user1689607,感谢您提供的链接。我已经更新了我的答案。
      • 嗯……那篇文章说起来在技术上是不正确的:void(0) 在技术上是不正确的,但实现允许它”。如果实现不允许允许它是不正确的,因为0 是一个表达式,而表达式可以在() 中分组。我只是说() 不是void 语法的一部分,如规范中的语法所示。
      • @user1689607,在这种情况下,说 () 不是语法的一部分在技术上是不正确的,因为规范指定 void 接受 unary expression 作为参数和表达式,正如我们所知可以分组在括号中。
      • @saji89:它可以是所提供的任何一元表达式的语法的一部分,但它不是 void 语法的一部分,就像使用 for 语法一样, 需要 ()es5.github.com/#x12.6.3 注意 () 是语法的一部分。
      猜你喜欢
      • 2010-11-20
      • 2011-06-18
      • 1970-01-01
      • 2014-01-07
      • 2011-03-08
      • 2011-10-21
      • 1970-01-01
      相关资源
      最近更新 更多