欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

javascript 參數(shù)缺省值

錢斌斌1年前8瀏覽0評論
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。但總體來講,這個特性是非常有用的,可以提高編碼效率和代碼可讀性。