阅读后:

“void 0”和“undefined”之间的差异,https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/void

我还有一些问题。

我读过了窗口.未定义 可以被覆盖vwhere空隙运算符将返回未定义的值总是

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

<a href=“javascript:void(0);”>单击此处不执行任何操作</a>

为了做到这一点没有什么,我一直认为我应该写:

href=“javascript:return false;”

这让我想到了另一个问题:Href(参考)上下文!):

javascript:void(0);javascript:返回false;

有什么区别?

同样-确实

函数doWork(){返回void(0);}

确切地

函数doWork(){返回未定义;}

谢谢。

7
  • 你的文章写得到处都是,你的“请回答两个问题”也无助于澄清事情。。。 评论 2012年9月27日13:56
  • @对不起,我应该把这个问题分成两个不同的问题吗? 评论 2012年9月27日13:57
  • 2
    理想情况下,您根本不会在href属性中使用javascript! 评论 2012年9月27日13:57
  • @epascarello这是一个MDN示例! 评论 2012年9月27日13:58
  • 2
    MDN说您不应该使用它。:)“但是,请注意,javascript:pseudo协议不受其他替代方案的欢迎,例如不引人注目的事件处理程序。”MDN无效 评论 2012年9月27日14:01

2个答案2

重置为默认值
6

这将无法正常工作:

href=“javascript:return false;”

因为你不在函数中。你在想:

onclick=“return false;”

这是正确的,因为返回false;被放置在函数中。这个值告诉onclick(单击)以防止元素的默认行为。

对于返回要在中工作的语句href公司属性,则需要一个完整的函数。

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

但这太长太难看了,正如评论所指出的href公司通常不鼓励。

编辑: 我刚刚学到了一些东西。有一个非未定义上面的表达式似乎用返回值替换了元素(至少在Firefox中是这样)。我并不完全熟悉在href公司,因为我从来没有做过。


是的,这个:

返回未定义;

返回完全相同的内容如下:

返回void 0;

只要未定义变量未被其他值重新定义或隐藏。

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

  • 未定义是一个全局变量,其默认值为未定义原始的

  • 空隙是一个一元运算符将其操作数的返回值替换为未定义原始的

所以它们都会导致未定义原始的,但他们以一种非常不同的方式这样做。

17
  • @RoyiNamir不,没有,看看错误控制台。仅仅因为javascript失败并不意味着它可以工作。
    – 伊恩
    评论 2012年9月27日14:21
  • 是的,我看了一下,发现有错误-谢谢你的回答。 评论 2012年9月27日14:21
  • 顺便说一句,我想onclick=“return false;”不仅可以防止默认行为,还可以阻止事件的传播(冒泡)。href=“#”只是指向空散列的链接,通常默认行为是跳到页面顶部;无需重新加载
    – 乍得
    评论 2012年9月27日14:23
  • 2
    @查德:那只是在jQuery中(stopPropagation).jQuery的行为是非标准的。 评论 2012年9月27日14:23
  • 1
    @罗伊·纳米尔:这只是一种让<a>元素显示为链接(通常为蓝色并带下划线),而不具有href公司通向任何地方。没有href公司,的<a>文本将与任何其他文本相似,但带有href公司,当您单击它时,浏览器会将您带到某处。这只是一次黑客攻击,因此您可以获得链接的外观,但无法获得行为。 评论 2012年9月27日14:43
4

如果您指定javascript:一些东西作为的值href公司属性,此某物将在有人激活该链接时进行评估。

将检查此评估的结果:如果类型计算结果为'未定义'字符串,什么都不会发生;如果没有,页面将重新加载评估结果作为其内容:

<a href=“javascript:void(0);”>这里什么也看不到,继续</a>不,仍然没有</a><a href=“javascript:prompt('你今天想去哪里?');”>看看这个</a>

这里的前两个链接基本上什么都不做。但第三个更有趣:无论你输入什么促使将显示给您-甚至是一个空字符串!但还不止这些:如果你点击取消,你仍然会看到一个新页面-无效的打印(已取消促使收益无效的你可能知道,null类型事实上是对象; 无效的转换为字符串是“null”).

它可能会变得更有趣:

这里发生了什么</a><a href=“javascript:window.undefined=333;undefined;”>这里呢</a>

好吧,在这里,我们在第一个链接仍然一无所获。但第二个链接将显示IE8中的333。:)

我想这也回答了你的第二个问题:typeof void(0)will总是未定义.未定义的类型如果有人决定把龙重新分配给窗口.未定义. )

…是的,javascript:返回false;错了:你不能从非功能环境中返回。你可能把它和onclick:返回false,但这完全是另一回事。)

1
  • 嗯,我知道写这一切要花很多时间。)只希望所有这些事情都能对某人有所帮助。)
    – 雨77度
    评论 2012年9月27日14:29

您的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.