2013-03-05 87 views
10

我碰到這個片段在kriskowal/q傳來:爲什麼使用void關鍵字?

/** 
* Applies the promised function in a future turn. 
* @param object promise or immediate reference for target function 
* @param args  array of application arguments 
*/ 
Q.fapply = fapply; 
function fapply(value, args) { 
    return dispatch(value, "apply", [void 0, args]); 
} 

什麼是使用void關鍵字的意義呢?爲什麼不寫[undefined, args]

+8

之一因爲可以重新定義全局'undefined';它不是一個保留字,像'null'。 – raina77ow 2013-03-05 18:42:53

+0

..可以重新定義,但是從JavaScript 1.8.5開始,根據ECMAScript 5規範,undefined是不可寫的。 – epascarello 2013-03-05 18:45:16

+5

'void 0'比'undefined'少3個字符。 – 2013-03-05 19:11:07

回答

9

MDN Docs of void

語法

void expression 

用途

此操作符允許插入產生副作用 到的地方,其值是未定義的表達式是表達式需要。

空隙操作者經常被用來僅獲取未定義 原始值,通常是使用「空隙(0)」(其等同於「空隙 0」)。在這些情況下,可以使用全局變量undefined (假定它尚未分配給非默認值)。

爲什麼?請參閱MDN Undefined

在舊版本的JavaScript中,undefined可能會被覆蓋,但根據ECMAScript 5規範,在JavaScript 1.8.5中啓動時,undefined是不可寫的。

+2

好的,所以這只是一種更安全的方式來編寫'undefined'? – 2013-03-05 18:51:19

+0

是的,就是這個原因。 – epascarello 2013-03-05 18:52:35

+0

@Rosarch:清楚的是,全局'undefined'是不可寫的。您仍然可以將其隱藏在局部變量範圍中。但請確保您不允許任何代碼重新定義「未定義」,並且使用起來非常安全。 – 2013-03-05 18:59:19

1

void是JavaScript中一個重要的關鍵字,它可以作爲一元操作符出現在其單操作數之前,該操作數可以是任何類型。

此運算符指定要評估的表達式而不返回值。它的語法可能是following