在JavaScript中,我应该使用void 0
还是undefined
来取消赋值,例如:
event.returnValue = void 0;
或者event.returnValue = undefined;
在JavaScript中,我应该使用void 0
还是undefined
来取消赋值,例如:
event.returnValue = void 0;
或者event.returnValue = undefined;
如果你使用的是现代浏览器(支持JavaScript 1.8.5),使用undefined
和void 0
可能会产生相同的结果(因为undefined
被设置为不可写),除了void
可以接受表达式作为参数并对其进行评估。
在旧版浏览器中(不支持JavaScript 1.8.5),最好使用void 0
。看下面这个例子:
console.log(undefined);
var undefined = 1;
console.log(undefined);
1
undefined
实际上是一个全局属性,而不是关键字。因此,可以更改undefined,而void
是一个运算符,在JavaScript中无法被覆盖,并始终返回值undefined
。只需查看我今天早些时候为类似问题提供的答案Why does void in Javascript require an argument?。
结论:
因此,如果您关心兼容性,最好使用void 0
。
[[Writable]]:false
。因此,这个例子只在基于ES3的引擎中有效,比如IE 8及更早版本的浏览器。 - Jonathan Lonowskiundefined
是不可写的事实。感谢您指出。请检查。 - thefourtheyeundefined
更好,因为a)它更清晰,b)你可以很容易地将其变成可压缩的变量。 - Bergi"void 0"更加安全。"undefined"是一个值,像任何其他值一样。可能会将该值重写为另一个值:
undefined = 3;
如果您使用了undefined,那么事件returnValue的含义会发生变化。不过,“void”是一个关键字,其含义无法改变。“void 0”始终会返回undefined值。
undefined
了? - Colin DeCluevoid 0
。:) 当然你不必这样做--一旦你使用一个函数,你可以这样做 (function(undefined) { /* 在这里使用 'undefined' */ })();
(不传递参数会得到 undefined 的值),或者这样:(function() { var undefined = (function(){})(); /* 在这里使用 'undefined' */ })();
关键是,有很多方法可以获得 undefined 的值。void 0
比没有函数作用域的 undefined
更加安全。 - Zachhttps://dev59.com/_HM_5IYBdhLWcg3wp0wX#1291950
只需使用undefined,因为它们都将被评估为它。
void 0
总是返回 undefined。 - user1508519returnValue
可能包含一个字符串,例如onbeforeunload
。 - avoundefined
的值。这就是所需的全部。 - user2736012undefined
全局设置为其他值,模块内部undefined
实际上仍具有值undefined
。@user2736012 - 关键是(在旧浏览器中),一些其他包含的库可能会潜在地更改undefined
作为全局变量的值,因此不能完全安全地假定undefined
始终实际上具有值undefined
。 - nnnnnn