iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
自我挑戰組

我的日常學習雜記與筆記整理系列 第 29

Day - 29 函式引數- 物件屬性 & 引數型別(一) 筆記

  • 分享至 

  • xImage
  •  

使用物件屬性作為引數

當函式有很多個參數時,要調用此函式時,會很難記住要傳入引數的正確順序。因此讓引數可以作為任意順序的**『名稱/值』對組 (name/value pairs)** 傳入,可讓使用者使用此函式時,不需要記住引數的順序 。

定義函式並使它預期傳入單一物件引數,然後調用函式時,傳入一個所需『名稱/值』對組的物件:

// 書中範例

// 1. 從陣列 from 複製 length 個元素到陣列 to
// 2. 從 from 陣列 的索引 from_start 開始複製
// 3. 把該元素複製到 to 陣列的 to_start 索引位置。


/* 要記住引數的順序並不簡單 
 型別 array : from, 
 型別 index : from_start, 
 型別 array : to, 
 型別 index : to_start, 
 型別 integer : length
*/
function arraycopy(from, from_start, to, to_start, length){
	//程式碼
}

// 這個版本的效能低一點,但不需要記得引數的順序,而 from_start 和 to_start 的預設值為0。

// easycopy 函式接受一個物件作為引數
// 物件包含 from、from_start、to、to_start 和 length 屬性
// from_start 和 to_start 的預設值為0
function easycopy(args){
// 使用 args.from、args.from_start、args.to 和 args.to_start 來存取傳入函式的引數值
// 若某個引數沒有被傳入,則預設值為0
	arraycopy(args.from, 
			  args.form_start || 0, 
			  args.to, 
			  args.to_start || 0, 
			  args.length);
}

// 調用 easycopy() 的方式
var a = [1,2,3,4], b = [];


//從陣列 a 複製4個元素到陣列 b 中
easycopy({from: a, to: b, length: 4});



function myFunction(options) {
  var x = options.x || 0;
  var y = options.y || 0;
  var z = options.z || 0;
  console.log(x, y, z);
}

myFunction({y: 2, x: 1, z: "banana"}); //  "1 2 banana"

引數型別

  1. JavaScript 方法參數沒有宣告的型別。
  2. 傳給函式的值並未做型別檢查。
  3. 使用具描述性的名稱來為函式引數命名,或在註解中加上引數的型別。
  4. 非必須的引數,可在註解中加上"optional"
  5. 若一個方法能夠接受任意數目的引數,則可用省略符號(ellipsis; ...)註解。
/**
 * This function takes in three parameters: x, y, and z.
 * @param {number} x - The value of x.
 * @param {number} y - The value of y.
 * @param {string} [z] - The value of z (optional).
 */
function myFunction(x, y, z) {
  console.log(x, y, z);
}

myFunction(1, 2); //  "1 2 undefined"
myFunction(1, 2, "banana"); //  "1 2 banana"

// 3. 可為函式引數使用具描述性的名稱,或在註解中加上引數的型別。
function fruitBasket(fruitName /* string */, quantity /* number */) {
  console.log(`You have ${quantity} ${fruitName}(s) in your basket.`);
}

// 4. 非必須的引數,可在註解中加上"optional"
function calculateTotal(price, taxRate /* optional */) {
  if (taxRate === undefined) {
    taxRate = 0.1; // default tax rate
  }
  return price * (1 + taxRate);
}

// 5. 若一個方法能夠接受任意數目的引數,則可用省略符號(ellipsis; `...`)註解。
function fruitSalad(...fruits) {
  console.log(`You have a fruit salad with ${fruits.join(', ')}.`);
}


fruitSalad("apple", "banana", "citrus", "date", "Elderberry", "fig ", "grape", "honeydew");
// 印出 "You have a fruit salad with apple, banana, citrus, date, Elderberry, fig , grape, honeydew."

參考資料:

  • JavaScript 大全 第六版, 歐萊禮

上一篇
Day - 28 陣列與類陣列物件
下一篇
Day - 30 引數型別(二) 與 型別轉換 筆記
系列文
我的日常學習雜記與筆記整理30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言