在Javascript中的void(0)澄清?

时间:2012-09-27 13:54:54

标签: javascript html void

阅读后两者:

difference between "void 0 " and "undefined"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/void

我还有一些问题。

我读过这个 window.undefined 可以覆盖v void运营商将返回未定义的值always

但引起我注意的例子是MDN中的那个:

<a href="javascript:void(0);">Click here to do nothing</a>

为了做 nothing ,我一直以为我应该写:

href="javascript:return false;"

这引出了另一个问题:(在Href上下文!):

javascript:void(0); vs javascript:return false;

有什么区别?

另外 -

function doWork() {
    return void( 0 );
}

完全

function doWork() {

    return undefined;
}

感谢。

2 个答案:

答案 0 :(得分:6)

这将无法正常工作:

href="javascript:return false;"

因为你没有参加比赛。你在想这个:

onclick="return false;"

这是正确的,因为return false;放在一个函数中。 false值告诉onclick阻止元素的默认行为。

要使return语句在href属性中运行,您需要一个完整的功能。

href="javascript:(function() { return false; })();"

但这只是漫长而丑陋的,正如评论所指出的那样,href中的JavaScript通常是不受欢迎的。

编辑: 我刚学到了一些东西。如上所述具有非undefined表达式似乎用返回值替换元素(至少在Firefox中)。我并不完全熟悉在href中使用JavaScript的完整后果,因为我从来没有这样做过。


是的,这个:

return undefined;

返回完全相同的东西:

return void 0;

只要undefined变量未被其他值重新定义或遮蔽。

虽然他们可能返回同样的事情,但说 同样的事情并不完全准确,因为:

  • undefined是一个全局变量,其默认值为undefined原语

  • void是一个一元运算符,它将用undefined原语替换其操作数的返回值

因此它们都会产生undefined原语,但它们会以非常不同的方式产生。

答案 1 :(得分:4)

如果您将javascript: something指定为href属性的值,则当有人激活该链接时,将评估此something

将检查此评估的结果:如果其typeof评估为'undefined'字符串,则不会发生任何事情;如果没有,页面将重新加载评估结果作为其内容:

<a href="javascript: void(0);">Nothing to see here, move along...</a>
<a href="javascript: undefined;">No, still nothing...</a>
<a href="javascript: prompt('Where would you like to go today?');">Check this out!</a>

这里的前两个链接基本上什么也没做。但第三个更有趣:无论你在prompt中输入什么,都会向你显示 - 即使是一个空字符串!但并非全部:如果您点击Cancel,您仍然会看到一个新页面 - 打印出null(取消prompt会返回null,并且您可能知道,typeof null实际上是object; null已转换为字符串,'null'}。

它可能会变得更有趣:

<a href="javascript: window.undefined = 333; void(0);">What happens here?</a>
<a href="javascript: window.undefined = 333; undefined;">And here?</a>

嗯,这里我们仍然没有得到任何第一个链接。但第二个链接将在IE8中显示333。 :)

我想,这也是你的第二个问题:typeof void(0)总是undefined。如果某人认为将其重新分配给typeof undefined是个好主意,window.undefined会给你龙。 )

...是的,javascript: return false;是错的:你无法从非功能环境返回。你可能把它与onclick: return false混淆了,但这完全是另一个故事。 )