javascript-void keyword

javascript-void keyword

写在前面

    ECMA-262定义了ECMAScript所支持的关键字(keyword),关键字不能用做ECMAScript程序的标识符(Indetifiers)。ECMA-262标准定义了如下关键字:javascript

 

break do instanceof typeof
case else new var
catch finally return void
continue for switch while
debugger function this with
default if throw delete
in try

 

void

    根据ECMA-262定义,void是javascript中的26个关键字之一,那么在javascript中void有什么用,和其余语言中的void有什么不同呢。根据ECMA官方标准定义,void是一个一元操做符并返回undefined,不管表达式后面是什么。html

    在ECMA-262规范中有以下描述:java

    void后能够是任意表达式(UnaryExpression),返回值有且只有undefined:ide

    

    注:不要写成void 1 + 1等这种形式,因为void比+优先级高,那就变成了(void 1) + 1this

基本用法

    一、void 0

    依据ECMA-262规范,void运算符返回而且只返回undefined,因为undefined在ECMA-262官方标准中既不是关键字也不是保留字,它能够做为变量名被赋值,所以undefined有可能做为变量被覆盖,全部使用void 0代替undefined就成了经常使用的方法。spa

function joke() {
    var undefined = "hello world";
    console.log(undefined); //会输出"hello world"
}

var property = function (key) {
    return function (obj) {
        return obj == null ? void 0 : obj[key];
    };
};

    二、javascript:void(0)

    能够用javascript:void(0),来阻止连接默认的跳转行为,下面是MDN文档的示例:debug

<a href="javascript:void(0);">Click here to do nothing</a>

<a href="javascript:void(alert('hello word!'))">Click me!</a>

    注:不管void(UnaryExpression)延伸出多少种用法,其本质就在于执行UnaryExpression并返回undefined这一点。
设计

疑问

    回到void的ECAM-262官方标准定义处,既然void的返回值永远是undefined,那么为何还须要调用GetVale(expr)。其实void设计来实现执行后边的表达式并忽略表达式结果返回undefined,若是表达式的结果是一个Reference,并无进行取值,而取值这个过程有可能有反作用(side-effect),因此要多一个GetValue步骤。code

参考

ECMAScript 5.1
MDN
相关文章
相关标签/搜索