2015-04-02 34 views
2

我已經看到了這個語法,我不確定它基本上在做什麼。 我目前的假設是,它檢查參數是否爲!= nullis in the return在JS返回後的方括號的含義-fn(){return {} []}

fn = function(value) { 
    return { 
     1: 'Test1', 
     2: 'Test2' 
    }[value]; 
} 

fn()結果undefined fn(1)結果Test1 fn(2)結果Test2 fn(3)結果undefined

我不知道我的假設。有人可以澄清我並告訴我這個語法結構的名稱是什麼(它是否有一個特定的名稱)?

編輯:我用隨機數字看到了這種情況,並沒有意識到它基本上只是訪問它。謝謝!

+2

不是100%肯定,但不是函數只是將輸入1和2映射到字符串Test1和Test2。 – Phil 2015-04-02 17:50:45

+1

這是一個更簡單的'switch'替代1:1查找而無需多次評估 – dandavis 2015-04-02 17:55:42

+0

這是一個無用的功能。爲什麼不使用該對象? – howderek 2015-04-02 18:00:58

回答

3

它不檢查任何東西。

你有一個對象文字。

{ 
    1: 'Test1', 
    2: 'Test2' 
} 

從中你用方括號

(result of evaluating previous expression)[value] 

提取值,然後返回結果

return (result of evaluating previous expression) 

你可以重寫此爲:

fn = function(value) { 
    var data = { 
     1: 'Test1', 
     2: 'Test2' 
    }; 
    var return_value = data[value]; 
    return return_value; 
} 
+0

哦,那麼簡單。謝謝! – Michael 2015-04-02 17:52:36

1

這個:

 { 
    1: 'Test1', 
    2: 'Test2' 
} 

是一個對象字面量,所以它的值是一個對象引用。

此:

[value] 

是一個對象屬性參考表達。如果將與對象引用結合使用的對象屬性值傳遞給[ ]運算符的字符串值未作爲對象中的屬性名稱找到,則會獲得對象屬性值或undefined

return填充的代碼前綴,使屬性查找的結果成爲函數的返回值。

因此,只要參數是該對象常量中的某個屬性,該函數就會返回與所傳入參數的字符串值對應的對象屬性值,否則返回undefined

+0

謝謝。澄清我的問題! – Michael 2015-04-02 17:52:57