Javascript是一門非常靈活的編程語言,它有很多方便的特性,其中之一就是允許函數(shù)參數(shù)設(shè)置缺省值。即在定義一個函數(shù)的時候,可以為參數(shù)賦上一個默認值。在函數(shù)調(diào)用時,如果沒有提供該參數(shù),那么將使用默認值。本文將重點介紹Javascript參數(shù)缺省值的使用方法和注意事項。
舉個例子,我們定義一個函數(shù),用來計算兩個數(shù)之和。如果沒有傳遞第二個參數(shù),那么第二個參數(shù)默認為0。代碼如下:
```
function add(a, b = 0) {
return a + b;
}
```
在調(diào)用該函數(shù)時,如果只傳一個參數(shù),那么默認第二個參數(shù)為0,返回的結(jié)果為參數(shù)1的值加上0。例如:
```
console.log(add(2)); // 2
```
如果另外傳入第二個參數(shù)的值,那么將用傳入的值代替默認值,返回參數(shù)1和參數(shù)2之和。例如:
```
console.log(add(2, 3)); // 5
```
經(jīng)過上面的例子,我們可以看到,設(shè)置參數(shù)缺省值非常方便實用,特別是在某些參數(shù)缺失或者傳值為null時,這個特性就非常有用。下面我們將介紹更多的用例。
1.設(shè)置多個缺省值
一個函數(shù)定義可以有多個參數(shù),如果需要指定缺省值,可以為每個參數(shù)都設(shè)置默認值。例如:
```
function createPerson(firstname, lastname, age = 18, gender = 'male') {
return {
firstname,
lastname,
age,
gender,
};
}
```
這個例子中,函數(shù)定義了四個參數(shù),其中age和gender可以不傳,默認為18和'male'。如果只傳入前面兩個參數(shù),則age和gender的值都是默認值。
```
console.log(createPerson('Tom', 'Jerry'));
```
輸出結(jié)果:
```
{
firstname: 'Tom',
lastname: 'Jerry',
age: 18,
gender: 'male'
}
```
如果傳入全部四個參數(shù),將覆蓋默認值,例如:
```
console.log(createPerson('Mary', 'Bobo', 24, 'female'));
```
輸出結(jié)果:
```
{
firstname: 'Mary',
lastname: 'Bobo',
age: 24,
gender: 'female'
}
```
2.不按順序設(shè)置缺省值
在函數(shù)定義時,可以不按參數(shù)順序為某些參數(shù)設(shè)置缺省值,這樣在調(diào)用函數(shù)時就可以只傳遞需要傳遞的參數(shù)。例如:
```
function add(a, b = 0, c) {
return a + b + c;
}
```
在調(diào)用時,如果只需要傳遞第一個和第三個參數(shù),則只需要傳遞這兩個參數(shù)即可,第二個參數(shù)將使用默認值:
```
console.log(add(1, undefined, 3)); // 4
```
需要注意的是,如果想跳過第二個參數(shù)而傳遞第三個參數(shù)的值,必須使用undefined作為占位符,不能省略第二個參數(shù)。這是因為在Javascript中,省略的參數(shù)相當于傳遞了一個undefined的值。
3.缺省值可以是一個動態(tài)計算的函數(shù)
在定義函數(shù)時,我們可以使用一個函數(shù)來計算缺省值,而不總是寫死一個靜態(tài)值。例如:
```
function getMessage(type, content = getDefaultMessage()) {
return {
type,
content,
}
}
function getDefaultMessage() {
return 'This is a default message';
}
```
在這個例子中,getDefaultMessage函數(shù)將返回一個缺省的內(nèi)容,如果需要傳遞自己的內(nèi)容才傳遞,這個缺省值就變成了動態(tài)計算的。
4.注意事項
在使用Javascript函數(shù)參數(shù)缺省值時,我們需要注意一些問題,以避免踩到坑。
4.1 參數(shù)的默認值為undefined不會生效
如果函數(shù)參數(shù)的默認值設(shè)為undefined,在函數(shù)調(diào)用時不傳值,默認值將不會生效,例如:
```
function func(a, b = 3, c = undefined, d = 4) {
console.log(a, b, c, d);
}
func(1, undefined); // 1 3 undefined 4
```
這個例子中,c參數(shù)的默認值設(shè)置為undefined,但是在函數(shù)調(diào)用時不傳值,c參數(shù)并沒有采用默認值。如果要采用默認值,必須傳遞undefined作為占位符。
4.2 參數(shù)默認值不會影響arguments對象
arguments數(shù)組包含函數(shù)參數(shù)的值,但不包含缺省值。例如:
```
function test(a, b = 3, c = 4) {
console.log(arguments[0], arguments[1], arguments[2]);
}
test(1); // 1 undefined undefined
test(1, 2); // 1 2 undefined
test(1, 2, 3); // 1 2 3
```
如上例子,test函數(shù)的第二個參數(shù)缺省值為3,當傳入一個參數(shù)時,第二個參數(shù)并沒有采用缺省值,并且在arguments變量中也沒有存在,只有一個值。因此,arguments的下標不一定等于函數(shù)定義時的形參名。
4.3 構(gòu)造函數(shù)的獨特性
在Javascript中使用構(gòu)造函數(shù)創(chuàng)建對象實例時,如果使用了缺省的形參,當創(chuàng)建多個對象時缺省形參的值會被共享。例如:
```
function Person(name, age = 18) {
this.name = name;
this.age = age;
}
let p1 = new Person('Tom');
let p2 = new Person('Mary');
console.log(p1.age === p2.age); // true
```
在這個例子中,我們創(chuàng)建了兩個Person實例,其中只傳遞了一個參數(shù),沒有傳第二個參數(shù),此時第二個參數(shù)應(yīng)該采用缺省值18,但是我們發(fā)現(xiàn)p1和p2的年齡都等于18。這是因為缺省值是被共享的。
為了避免這個問題,我們需要使用類似下面的方式:
```
function Person(name, age) {
this.name = name;
this.age = age === undefined ? 18 : age;
}
let p1 = new Person('Tom');
let p2 = new Person('Mary');
console.log(p1.age === p2.age); // false
```
在這個例子中,我們手動判斷是否傳遞了第二個參數(shù),如果沒有傳入就采用默認值。
總之,在使用Javascript的函數(shù)參數(shù)缺省值時,我們需要考慮各種不同的情況,并且小心使用它們,以避免引入新的bug。但總體來講,這個特性是非常有用的,可以提高編碼效率和代碼可讀性。
網(wǎng)站導(dǎo)航
- zblogPHP模板zbpkf
- zblog免費模板zblogfree
- zblog模板學習zblogxuexi
- zblogPHP仿站zbpfang