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
相關文章
相關標籤/搜索