【问题标题】:void(0) clarification in Javascript?Javascript 中的 void(0) 说明?
【发布时间】:2012-09-19 08:06:18
【问题描述】:

读完后:

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

我还有一些问题。

我读过 window.undefined 可以被覆盖 vwhere void 运算符将返回未定义的值 always

但吸引我眼球的例子是 MDN 中的例子:

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

为了什么都不做,我一直认为我应该写:

href="javascript:return false;"

这让我想到另一个问题:(Href context !):

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

有什么区别?

也 - 会

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

正是

function doWork() {

    return undefined;
}

谢谢。

【问题讨论】:

  • 你的文章到处都是,你的“请2个问题”也无助于澄清事情......
  • @BoltClock 对不起,我应该把这个问题分成两个不同的问题吗?
  • 理想情况下,您根本不会在 href 属性中使用 javascript!
  • @epascarello 这是一个 MDN 示例!
  • 而且 MDN 说你不应该使用它。 :) “但是​​请注意,不鼓励使用 javascript: 伪协议而不是其他替代方案,例如不显眼的事件处理程序。” MDN Void

标签: javascript html void


【解决方案1】:

这将无法正常工作:

href="javascript:return false;"

因为你不在一个函数中。你在想这个:

onclick="return false;"

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

要使return 语句在href 属性中起作用,您需要一个完整的函数。

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

但这又长又丑,正如 cmets 所指出的,href 中的 JavaScript 通常不鼓励使用。

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


是的,这个:

return undefined;

返回完全相同的东西:

return void 0;

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

虽然它们可能返回相同的东西,但说它们相同的东西并不完全准确,因为:

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

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

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

【讨论】:

  • @RoyiNamir 不,不是,请查看错误控制台。仅仅因为 javascript 失败,并不意味着它可以工作。
  • 是的,我查看了它,但有错误 - 感谢您的出色回答。
  • 顺便说一句,我认为onclick="return false;" 不仅会阻止默认行为,还会阻止事件的传播(冒泡)。 href="#" 只是一个指向空哈希的链接,通常默认行为是跳转到页面顶部;无需重新加载
  • @Chad:这只是在 jQuery (stopPropagation) 中。 jQuery 的行为是非标准的。
  • @RoyiNamir:这只是一种使&lt;a&gt; 元素显示为链接(通常是蓝色和下划线)的方法,而无需href 导致任何地方。如果没有href&lt;a&gt; 文本将看起来像任何其他文本,但是使用href,当您单击它时,浏览器会带您到某个地方。这只是一个 hack,因此您可以看到链接的外观,而不是行为。
【解决方案2】:

如果您将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 实际上是@ 987654333@; 和 null 转换为 String 是,'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。如果有人认为将它们重新分配给window.undefined 是个好主意,typeof undefined 可以给你龙。 )

... 是的,javascript: return false; 是错误的:你不能从非功能环境返回。您可能会将其与onclick: return false 混淆,但这完全是另一回事。 )

【讨论】:

  • 好吧,我知道写这一切会花费太多时间。 ) 只是希望所有这些东西都会对某人有所帮助。 )
猜你喜欢
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 2012-10-31
  • 2013-12-05
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多