3

阅读后:

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

我还有一些问题。

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

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

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

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

href="javascript:return false;"

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

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

有什么区别?

还有 - 是否

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

正是_

function doWork() {

    return undefined;
}

谢谢。

4

2 回答 2

6

这将无法正常工作:

href="javascript:return false;"

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

onclick="return false;"

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

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

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

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

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


是的,这个:

return undefined;

返回完全相同的东西:

return void 0;

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

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

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

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

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

于 2012-09-27T14:14:17.053 回答
4

如果您指定javascript: somethinghref属性值,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转换为 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. typeof undefined如果有人认为将它们重新分配给window.undefined. )

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

于 2012-09-27T14:28:46.757 回答