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

时间:2009-03-20 16:31:33

标签: javascript void

我见过一些人在代码中使用void运算符。我也在href属性中看到了这一点:javascript:void(0)这似乎没有javascript:;

更好

那么,使用void运算符的理由是什么?

4 个答案:

答案 0 :(得分:50)

Explanation of its use in links

  

这就是bookmarklet的原因   经常将代码包装在void()或   没有的匿名函数   返回任何内容以停止浏览器   从试图显示结果   执行书签。对于   例如:

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

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

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

在Firefox中,上面会显示:

[object Window]

答案 1 :(得分:15)

在ES1.3之前,JavaScript中无法直接访问undefined值。

因此包含了运营商void <expression>以允许访问此值。

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

undefined属性被添加到ES1.3中的全局对象时,void的实用程序变得不明显。

因此你的问题。

答案 2 :(得分:12)

请考虑以下事项:

<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" />

第一个链接将交换文本字段的值。第二个链接将打开一个带有“one fish”文本的新页面。如果您使用javascript: link,表达式会返回nullundefined以外的其他内容,浏览器会将其解释为链接应该执行的操作。通过将所有表达式/状态包装在void()函数中,可以确保运行整个代码片段。目前,这主要用于Bookmarklets,因为使用onclick属性,或者在单独的Javascript块/文件中设置事件处理程序是“常态”。

对于javascript:javascript:void(),第一个陈述含糊不清。你说,“嘿,我想运行一些javascript”,但是你没有提供任何代码。浏览器应该在这里做什么并不一定清楚。使用第二个语句,你会说“嘿,运行一些javascript”,你的代码最终返回undefined,浏览器知道这意味着“什么都不做”。

由于我在这里,我还要指出,使用javascript:javascript:void();已经不再支持大多数关心加价的人。更好的办法是让你的onclick处理程序返回false,并将链接指向一个页面/资源,这对于关闭了javascript或使用NoScript等javascript阻止程序的人来说是有意义的。

答案 3 :(得分:3)

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

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,如下所示:{ {1}}或var undefined = "hello",大多数浏览器会接受;未承诺标识符var undefined = 23实际上是不确定的¹。因此,要返回 actual 未定义的值,请使用undefined运算符。它不是一个非常流行的运算符,并且很少使用。

让我们看一个带有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 丢弃该函数的返回值,并显式返回undefined。

您可以从我的教程文章中进一步了解:https://josephkhan.me/the-javascript-void-operator/

¹在ECMAScript 5和更高版本中,保证全局变量void是未定义的(ECMA-262 5th Ed.,第15.1.1.3节),尽管仍然可以在内部作用域内使用变量。名为undefined