2013-03-05 97 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

相关问题