<a href="javascript:void(0)" id="loginlink">login</a>

我见过很多次这样的威胁,但我不知道这到底意味着什么。


当前回答

void是一个运算符,用于返回未定义的值,因此浏览器将无法加载新页面。

除非是返回null的JavaScript函数,否则Web浏览器将尝试将使用的任何内容作为URL并加载它。例如,如果我们单击如下链接:

<a href="javascript: alert('Hello World')">Click Me</a>

然后将显示一条警报消息,而不加载新页面,这是因为警报是一个返回空值的函数。这意味着,当浏览器尝试加载新页面时,它会看到null,并且没有任何内容可加载。

关于void运算符需要注意的一点是,它需要一个值,并且不能单独使用。我们应该这样使用:

<a href="javascript: void(0)">I am a useless link</a>

其他回答

值得一提的是,检查undefined时有时会看到void 0,因为它需要更少的字符。

例如:

if (something === undefined) {
    doSomething();
}

对比:

if (something === void 0) {
    doSomething();
}

为此,某些缩小方法将undefined替换为void 0。

这意味着它什么都不会做。这是试图让链接不在任何地方“导航”。但这不是正确的方式。

实际上,您应该在onclick事件中返回false,如下所示:

<a href="#" onclick="return false;">hello</a>

通常,如果链接正在做一些“JavaScript-y”的事情,则使用它。比如发布AJAX表单,或者交换图像等等。在这种情况下,只需使调用的函数返回false。

然而,为了让你的网站变得非常棒,如果浏览者选择不运行JavaScript,通常你会包含一个执行相同操作的链接。

<a href="backup_page_displaying_image.aspx"
   onclick="return coolImageDisplayFunction();">hello</a>

要理解这个概念,首先应该理解JavaScript中的void运算符。

void运算符的语法为:void«expr»,它计算expr并返回undefined。

如果将void实现为函数,则如下所示:

function myVoid(expr) {
    return undefined;
}

这个void运算符有一个重要的用法,那就是丢弃表达式的结果。

在某些情况下,返回undefined而不是表达式的结果是很重要的。然后可以使用void来丢弃该结果。一种这样的情况涉及javascript:URL,对于链接应该避免使用javascript,但对于bookmarklets很有用。当您访问其中一个URL时,许多浏览器会将当前文档替换为评估URL“内容”的结果,但前提是结果未定义。因此,如果要在不更改当前显示内容的情况下打开新窗口,可以执行以下操作:

javascript:void window.open("http://example.com/")

据我所见,void运算符在JavaScript中有3种常见用法。您所指的<a href=“javascript:void(0)”>是使<a>标记成为no-op的常见技巧。有些浏览器根据是否有a href来区别对待<a>标记,因此这是一种创建与a href链接的方法,但什么都不做。

void运算符是一个接受参数并返回undefined的一元运算符。因此var x=空隙42;表示x===未定义。这很有用,因为在严格模式之外,undefined实际上是一个有效的变量名。因此,一些JavaScript开发人员使用void 0而不是undefined。理论上,您也可以执行<a href=“javascript:undefined”>,这与void(0)相同。

使用javascript:void(0)意味着HTML的作者误用了锚元素而不是按钮元素。

锚标记经常与onclick事件一起滥用以创建通过将href设置为“#”或“javascript:void(0)”防止页面刷新。这些值会导致意外复制/拖动链接时的行为,在新的标签/窗口、书签以及当JavaScript仍在下载时,出错或被禁用。这也向辅助技术(例如屏幕阅读器)。在这些情况下建议改用<button>。通常,您只应使用使用正确URL导航的锚点。

资料来源:MDN的<a>页面。