JavaScript 中 void 运算符的意义是什么?

问题描述 投票:0回答:4

我见过有些人在代码中使用

void
运算符。我也在
href
属性中看到了这一点:
javascript:void(0)
似乎并不比
javascript:;

更好

那么,使用

void
运算符的理由是什么?

javascript void
4个回答
63
投票

其在链接中的使用说明

这就是书签的原因 通常将代码包装在 void() 或 一个匿名函数,它不 返回任何内容以停止浏览器 尝试显示结果 执行小书签。为了 示例:

javascript:void(window.open("dom_spy.html"))

如果直接使用返回的代码 某事(一个新的窗口实例 在这种情况下),浏览器将最终 显示:

javascript:window.open("dom_spy.html");

在 Firefox 中,上面将显示:

[object Window]

36
投票

直到 ES1.3 之前,

undefined
值无法在 JavaScript 中直接访问。

因此包含了运算符

void <expression>
以允许访问该值。

它有时很有用,特别是在使用 Web API(例如事件处理程序)时,可确保表达式的结果一致

undefined

当 ES1.3 中将

undefined
属性添加到全局对象时,
void
的效用变得不明显。

因此你的问题。


22
投票

JavaScript 中,

void
运算符用于显式返回未定义的值。它是一个一元运算符,这意味着只能使用一个操作数。您可以如下所示使用它 - 独立使用或带括号使用。

void expression;
void(expression);

让我们看一些例子:

void 0; //returns undefined
void(1); //returns undefined

void 'hello'; //undefined
void {}; //undefined
void []; //undefined

void myFunction(); 
void(myFunction());

如果你问为什么需要一个特殊的关键字来返回 undefined 而不是仅仅返回

undefined
:原因是在 ES5 之前你实际上可以命名一个全局变量
undefined
,如下所示:
var undefined = "hello"
var undefined = 23
,大多数浏览器都会接受它;标识符
undefined
并未承诺实际上是未定义的。因此,要返回 actual 未定义值,需要使用
void
运算符。但它不是一个很受欢迎的运算符,而且很少使用。

让我们看一个带有

void
的函数示例:

//just a normal function
function test() {
    console.log('hello');
    return 2;
}

//lets call it
console.log(test()); //output is hello followed by 2

//now lets try with void
console.log(void test()); //output is hello followed by undefined

void
丢弃函数的返回值并显式返回 undefined。

您可以从我的教程文章中阅读更多内容:https://josephkhan.me/the-javascript-void-operator/

1 在 ECMAScript 5 及更高版本中,全局变量

undefined
保证未定义(ECMA-262 5th Ed.,§ 15.1.1.3),尽管仍然可以命名内部作用域内的变量
undefined


15
投票

考虑以下因素:

<a href="javascript:void(fish=document.getElementById('foo').value);void(document.getElementById('bar').value=fish);">With Void</a>

<a href="javascript:fish=document.getElementById('foo').value;document.getElementById('bar').value=fish;">Without Void</a>

<input type="text" id="foo" value="one fish" />
<input type="text" id="bar" value="no fish" />

第一个链接将交换文本字段的值。第二个链接将打开一个新页面,其中包含文本“一条鱼”。如果您使用

javascript: link
,一旦表达式返回
null
undefined
以外的内容,浏览器就会将其解释为链接应该执行的操作。通过将所有表达式/语句包装在
void()
函数中,您可以确保整个代码片段都能运行。如今,这主要在 Bookmarklet 中使用,因为使用
onclick
属性,或在单独的 Javascript 块/文件中设置事件处理程序是“规范”。

至于

javascript:
javascript:void()
,第一个说法是不明确的。你说,“嘿,我想运行一些 javascript”,但你没有提供任何代码。浏览器在这里应该做什么并不一定很清楚。对于第二个语句,您说“嘿,运行一些 javascript”,您的代码最终返回未定义,浏览器知道这意味着“不执行任何操作”。

既然我在这里,我还要指出,使用

javascript:
javascript:void();
已经不再受到大多数关心标记的人的青睐。更好的做法是让你的 onclick 处理程序返回 false,并让链接指向对关闭 javascript 或正在使用 JavaScript 拦截器(例如 NoScript)的人有意义的页面/资源。

© www.soinside.com 2019 - 2024. All rights reserved.