JavaScript 中 void 运算符的重点是什么?

IT技术 javascript void
2021-01-18 00:48:32

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

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

4个回答

其在链接中的使用说明

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

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

如果您直接使用返回某些内容的代码(在本例中为新窗口实例),浏览器最终将显示:

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

在 Firefox 中,上面将显示:

[object Window]
2021-03-26 00:48:32
Internet Explorer(我测试了 IE 11)与 Firefox 的行为一致,但 Chrome 不适用于 JS 代码javascript:window.open("dom_spy.html");它会打开一个新选项卡,而不会对当前选项卡窗口产生任何副作用。
2021-04-06 00:48:32

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

void <expression>因此,包含一个运算符以允许访问此值。

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

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

因此你的问题。

在 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"or var undefined = 23,并且大多数浏览器会接受它;undefined没有Promise标识符实际上是未定义的¹。因此,要返回实际的未定义值,使用了void操作符 is/was。虽然它不是一个非常受欢迎的运算符,并且很少使用。

让我们看一个带有 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 第 5 版,第 15.1.1.3 节),尽管内部作用域内的变量仍然可以被命名undefined

1.3. 我的错。
2021-03-29 00:48:32
@BenAston:ES 3.1 或 1.3,如您的回答?
2021-03-30 00:48:32
这个答案是不正确的。实际原因是undefined直到 ES 3.1 才可以直接在语言中访问。请看我下面的回答。
2021-03-31 00:48:32

考虑以下:

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

第一个链接将交换文本字段的值。第二个链接将打开一个带有文本“一条鱼”的新页面。如果您使用 a javascript: link,则表达式返回nullor以外的内容的那一刻undefined,浏览器会将其解释为链接应该做什么。通过将所有表达式/语句包装在一个void()函数中,您可以确保整个代码片段都能运行。如今,这主要用于 Bookmarklets,因为使用onclick属性或在单独的 Javascript 块/文件中设置事件处理程序是“规范”。

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

既然我在这里,我还要指出使用javascript:javascript:void();已经失去大多数关心标记的人的青睐。更好的做法是让您的 onclick 处理程序返回 false,并将链接指向一个页面/资源,这对于关闭 javascript 或使用 javascript 阻止程序(如 NoScript)的人来说是有意义的。

是否有任何空语句返回 false 或返回 true,表明语句运行成功?
2021-03-19 00:48:32
无效的语法:(...;...). 要么使用逗号运算符,要么将void 0void(0)放在末尾。
2021-03-29 00:48:32
问题作者写的是“javascript:;”,而不是“javascript:”。那么,在那种情况下它不会有歧义,不是吗?
2021-04-04 00:48:32
为什么一个空语句会返回一些东西?
2021-04-08 00:48:32