void 0
void 關鍵字毅弧,該void 運算符能對給定的表達式進行求值,然后返回 undefined。
void()僅僅是代表不返回任何值澜沟,但是括號內的表達式還是要運行,例如下面代碼
void(console.log("Wornning!"))
在使用立即執(zhí)行的函數(shù)表達式時峡谊,可以利用 void 運算符讓 JavaScript 引擎把一個function關鍵字識別成函數(shù)表達式而不是函數(shù)聲明(語句)茫虽。
void function iife() {
var bar = function () {};
var baz = function () {};
var foo = function () {
bar();
baz();
};
var biz = function () {};
foo();
biz();
}();
JavaScript URIs中刊苍,用戶在點擊一個以 javascript: URI 時,它會評估URI中的代碼濒析,然后用返回的值替換頁面內容正什,除非返回的值是undefined。
<a href="javascript:void(0);">點我沒有反應的!</a
void可用于返回undefined号杏。underscore 源碼沒有出現(xiàn) undefined婴氮,而用 void 0 代替。
因為undefined是全局對象的一個屬性盾致。也就是說主经,它是全局作用域的一個變量。undefined的最初值就是原始數(shù)據(jù)類型undefined庭惜。
在現(xiàn)代瀏覽器(JavaScript 1.8.5/Firefox 4+)罩驻,自ECMAscript5標準以來undefined是一個不能被配置(non-configurable),不能被重寫(non-writable)的屬性护赊。
但是事實并非如此惠遏,undefined有可能在非全局作用域中被當作標識符(變量名)來使用(因為undefined不是一個保留字)。
(function() {
var undefined = 'foo';
console.log(undefined, typeof undefined)
})()//chrome -- foo string
(function(undefined) {
console.log(undefined, typeof undefined)
})('foo')//chrome -- foo string
所以用void 0替代undefined百揭,更重要的是它不能被重寫爽哎。
在ES5下,void 0替代undefined能夠省字節(jié)大小器一,對壓縮代碼很有幫助课锌。