箭頭函數提供了更簡潔和更短的語法,其中一個可用功能是可以將函數編寫為具有隱式返回值的lambda表達式。這對於功能樣式代碼很方便,比如使用函數映射數組:
const numbers = [1,2,3,4];
numbers.map(n => n * n);
這個箭頭函數將按照預期的方式工作,它將值自身相乘並返回到包含的新數組[1, 4, 9, 16]
但是,如果你嘗試映射到對象,例如,假設將數字映射到包含如下值的對象數組:
const numbers = [1,2,3,4];
numbers.map(n => {value:n});
這里的結果實際上是一個包含未定義值的數組。雖然看起來我們在這里返回一個對象,但是解釋器看到了完全不同的東西。如果我們將上面的箭頭函數推斷為解釋器,實際上最終執行的內容像這樣:
numbers.map(function(n){ value: n return; });
解決方法就是將對象包裝在括號中,將其轉換為表達式而不是塊語句
numbers.map(n =>({value:n}));