ES6 函數默認值

1、ES6之前,函數如果需要默認值,需要在函數內額外處理,如:

function log(x,y){
    y = y || 'World'
    console.log(x,y);
}
log('Hello');//Hello World
log('Hello','ES6');//Hello ES6
log('Hello','');//Hello World

上述代碼中第二行,檢查y參數是否有值,如果沒有,將其賦值爲默認值'World'。

這種寫法有個問題,只要y參數的布爾值爲false,就會使用默認值,於是參數y無效。

就像上述代碼最後一行,y參數賦值爲'',但無效。

一般來說,爲了避免這個問題,還需要再加一個判斷:

if(typeof y === undefined){
    y = 'World';
}

2、ES6函數在定義時,可以賦默認值,上述代碼可以改爲:

function log(x,y='World'){
    console.log(x,y)
}
log('Hello'); //Hello
log('Hello','ES6');//Hello ES6
log('Hello','');//Hello

比ES5的寫法更簡潔明瞭。

這種寫法也可以:

function Para(x=0,y=0){
    this.x=x;
    this.y=y;
}
let para = new Para();
para;  //{x:0,y:0}

參數默認值也可以是表達式:

const BASE =10;
function add(x,y=BASE+5){
    console.log(x+y);
}
add(5); //20

這樣也行:

function bigger(x,y=Math.abs(-5)){
    if(x>y){
        return 'bigger';
    }
	return 'smaller';
}
bigger(10); //'bigger'

使用參數默認值時,不能有同名參數,參數變量也是默認聲明的,不能用let或者const在函數內再次聲明。

另外,參數默認值不是傳值的,而是每次都會重新計算默認值表達式的值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章