今天我們回顧一下運算子的強制轉型,並利用這個特性來做一些事吧 !
我們先建立一個 greet
function,並設定一個 name 的參數,接著呼叫 greet
function,傳入一些值,將結果輸出。
1 | function greet (name) { |
程式執行後,我們知道結果為 Hello, apeiros0
,那如果呼叫 greet
function 時沒有傳入參數呢 ?
1 | function greet (name) { |
JavaScript 和其他程式語言不同,它會當作 name 沒有任何東西,所以會輸出 Hello, undefined
,這是因為 function 被呼叫時,執行環境建立,而 name 變數在 function 內被創造,先被賦予 undefined
,之後執行階段再賦予值。
而在 console.log
中有使用 +
運算子,當字串與 name 作為參數時,name 會被強制轉型成字串,所以 undefined
會被轉成字串連接在一起,最後輸出 Hello, undefined
。
但我們總不可能將 undefined
作為值輸出,該怎麼做才能解決這個問題呢 ?
預設值 (Default Values)
我們可以給 name 參數一個預設值,關於這部分有兩個方法可以使用:
ES6 語法
我們可以直接賦予 name 參數一個值當作預設值。
1 | function greet (name = 'apeiros0') { |
||
(OR) 運算子
使用 ||
運算子是比較常見的做法,||
運算子不只會回傳 true
或 false
,還可以回傳被強制轉型成 true
的值,如果兩個值都為 true
,會回傳第一個為 true
的值,這也是為什麼能用 ||
運算子來設定預設值。
1 | false || true; // true |
所以,如果沒有傳入參數給 function,name 參數是 undefuned
,而透過 ||
運算子會將為 true
的 apeiros0
賦予給 name,最後輸出 Hello, apeiros0
。
1 | function greet (name) { |
如果有傳入參數,會將第一個為 true
的值賦予給 name,所以這裡的 Stark
會先輩賦予給 name。
補充:
||
運算子的優先性 (5) 比=
運算子 (3) 的優先性高,所以||
會優先執行。
1 | function greet (name) { |
注意:我們得注意數字 0,如果我們傳入 0,會被轉成
false
,不會輸出 0。
總結
我們可以透過 ES6 或是 ||
運算子這兩種方式來設定預設值,而 ||
運算子的方法是透過強制轉型將為 true
的值回傳給你,但我們仍須注意數字 0,因為 0 會被轉為 false
,不會顯示原本的值。