我应该在JavaScript中使用`void 0`或`undefined`

avo*_*avo 27 javascript

我应该使用void 0undefined在JavaScript中取消分配值,例如:

event.returnValue = void 0;
Run Code Online (Sandbox Code Playgroud)

要么

event.returnValue = undefined;
Run Code Online (Sandbox Code Playgroud)

the*_*eye 43

如果您正在使用现代浏览器(支持javascript 1.8.5)undefined并且void 0很可能相同(因为undefined它不可写),除了void可以接受表达式作为参数并对其进行评估.

在旧版浏览器中,(不支持javascript 1.8.5)最好使用void 0.看看这个例子:

console.log(undefined);
var undefined = 1;
console.log(undefined);
Run Code Online (Sandbox Code Playgroud)

它会打印出来

1
Run Code Online (Sandbox Code Playgroud)

undefined实际上是一个全球财产.(它不是关键字).因此,未定义可以更改,其中void运算符,不能在javascript中重写,并始终返回值undefined.请查看我今天早些时候给出的一个类似问题的答案/sf/answers/1355734481/.

结论:

所以,如果你担心兼容性,最好配合使用void 0.

  • 虽然它是一个变量,但它被赋予了 `[[Writable]]: false` [在 ES5 中](http://es5.github.io/#x15.1.1.3)。因此,该示例仅适用于基于 ES3 的引擎,例如 IE 8 及更早版本。 (2认同)

Zac*_*ach 5

“ void 0”更安全。“未定义”是一个值,就像其他值一样。可以用另一个值覆盖该值:

undefined = 3;
Run Code Online (Sandbox Code Playgroud)

如果您使用undefined,那将改变event.returnValue的含义。不过,“ void”是一个关键字,其含义无法更改。“ void 0”将始终给出未定义的值。

  • 在任何现代浏览器中都没有。 (2认同)
  • @ColinDeClue 取决于[范围...](http://jsfiddle.net/antisanity/gFtJW/) (2认同)
  • @Bergi我注意到您在如何解决该问题的示例中仍在使用“ void 0”。:)当然,您不必-一旦使用了函数,就可以执行((function(undefined){/ *在这里使用'undefined'* /})();`(不传递参数给出未定义的值),或者这样:`(function(){var undefined =(function(){})(); / *在这里使用'undefined'* /})();`关键是,有很多获取未定义值的方法。严格来说,“ void 0”比没有函数作用域的“ undefined”更为安全。 (2认同)