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

新手上路,请多包涵

我见过一些人在他们的代码中使用 void 运算符。我也在 href 属性中看到了这个: javascript:void(0) 这似乎并不比 javascript:;

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

原文由 mkoryak 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 346
2 个回答

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 ,就像这样: var undefined = "hello"var undefined = 23 ,大多数浏览器都会接受它;标识符 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

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

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

¹ 在 ECMAScript 5 及更高版本中,全局变量 undefined 保证未定义( ECMA-262 第五版,§ 15.1.1.3),尽管内部范围内的变量仍然可能是命名为 undefined

原文由 Joseph Khan 发布,翻译遵循 CC BY-SA 4.0 许可协议

其在链接中的使用说明

这就是 bookmarklet 通常将代码包装在 void() 或不返回任何内容的匿名函数中以阻止浏览器尝试显示执行 bookmarklet 的结果的原因。例如:

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

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

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

在 Firefox 中,上面将显示:

 [object Window]

原文由 Crescent Fresh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏