【问题标题】:Why use void(0)? [duplicate]为什么使用 void(0)? [复制]
【发布时间】:2014-01-08 05:07:38
【问题描述】:

让我们暂时假设您必须创建一个没有有意义的href 的 JavaScript 链接。 (我知道这种做法是有问题的。)在这种情况下,为什么这么多人使用...

<a href="javascript:void(0);"> My link </a> 

知道void(0) 的计算结果为undefined,我可以简单地使用以下逻辑吗?

<a href="javascript:undefined;"> My link </a>

【问题讨论】:

  • 你实际上可以重新定义undefined,而 void 对于 javscript 链接中的非平凡代码很有用。
  • @Tim 实际上,您在 ES3 中可以。这在 ES5 中已更改 - 您不能再在全局范围内重新定义 undefined,尝试这样做会静默失败。
  • 我通常更喜欢&lt;a href="#"&gt;My link&lt;/a&gt;。只要记住在处理程序中添加event.preventDefault()
  • @RocketHazmat 如果您不阻止 JS 中的默认行为,此方法会将 # 添加到 url + 会将页面滚动到顶部
  • @Mohammad Areeb Siddiqui ...我理解你的解释,但我想说,在我看来,使用这样的 标签是一种黑客行为。在 HTML 中使用适当的语义很重要。锚点( 标签)应该用于链接,而不是样式,样式应该使用 CSS 实现。

标签: javascript html


【解决方案1】:

为什么人们使用void(x) 而不是undefined

两者都可以,但undefined 是一个保留变量,它的值可以更改:

undefined = true;

这将给出 true 而不是 undefined。

void() 是一个关键字总是返回 undefined。 无论你在关键字中放置什么:

void('return false plox'); //will return false

这里有更多关于这个主题的信息:What does `void 0` mean?

jsFiddle


注意&lt;a href="#"&gt; 不一样,它仍然充当链接并重定向您,而之前的方法将取消事件(类似于event.preventDefault)。

更新

自 ECMAScript 5 起,全局 undefined 变量不再可直接编辑 (See for example Mozilla docs)。正如一些人所指出的那样,它现在只是隐藏了全局变量。

【讨论】:

  • undefined 是一个保留变量,它的值可以改变”,真的吗?你能澄清一下吗?我刚刚在我的 Chrome 控制台中进行了这个快速测试:undefined = true; undefined,但undefined 仍然是undefined
【解决方案2】:

有三个不同,

  1. void 计算给定的表达式,然后返回 undefined
  2. window.undefined 是可写的,而 void 运算符将始终返回 undefined
  3. void 的字符较少,如果您使用大量字符,代码会更小

另外,如果您使用void 来返回undefined,那么您可以简单地使用void 0,它相当于void(0)

【讨论】:

    猜你喜欢
    • 2011-11-19
    • 2016-12-03
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多