首頁 web前端 js教程 ECMAScript6函數預設參數_javascript技巧

ECMAScript6函數預設參數_javascript技巧

May 16, 2016 pm 03:55 PM
預設參數

語言更新時每一個新增的特性都是從千百萬開發者需求裡提取過來的,規範採用後能減少程式設計師的痛苦,帶來便捷。

我們常常會這麼寫

function calc(x, y) {
  x = x || 0;
  y = y || 0;
  // to do with x, y
  // return x/y
}
登入後複製

簡單說就是x,y提供了一個預設值為0,不傳時x, y以值0來運算。傳了就以實際值計算。

又如定義一個ajax

function ajax(url, async, dataType) {
  async = async !== false
  dataType = dataType || 'JSON'
  // ...
}
登入後複製

自己用原生JS封裝的一個簡易ajax函數,url必填,async和dataType可選,即不填時預設同步請求和返回JSON格式資料。

再如定義一個矩形類別

function Rectangle(width, height) {
  this.width = width || 200;
  this.height = height || 300;
}
登入後複製

new時不傳任何參數,也會建立一個預設寬高為200*300的矩形。

無論是calc,ajax函數還是Rectangle類,我們都需要在函數體內做預設值的處理,如果語言本身處理豈不樂哉? ES6提供了該特性(Default Parameters),以下是用ES6新特性重寫的calc,ajax,Rectangle。

function calc(x=0, y=0) {
  // ...
  console.log(x, y)
}
calc(); // 0 0
calc(1, 4); // 1 4
 
function ajax(url, async=true, dataType="JSON") {
  // ...
  console.log(url, async, dataType)
}
ajax('../user.action'); // ../user.action true JSON
ajax('../user.action', false); // ../user.action false JSON
ajax('../user.action', false, 'XML'); // ../user.action false XML
 
function Rectangle(width=200, height=300) {
  this.width = width;
  this.height = height;
}
var r1 = new Rectangle(); // 200*300的矩形
var r2 = new Rectangle(100); // 100*300的矩形
var r3 = new Rectangle(100, 500); // 100*500矩形
登入後複製

可以看到,ES6把預設值部分從大括號移到了小括號裡,還減少了「||」運算,函數體從此瘦身了。參數預設值嘛,本來就該在定義參數的地方,這樣看起來簡潔了不少。 O(∩_∩)O

預設參數可以定義在任意位置,例如在中間定義一個

function ajax(url, async=true, success) {
  // ...
  console.log(url, async, success)
}
登入後複製

定義了一個預設參數async,url和success是必傳的,這時需要把中間的參數置為undefined

ajax('../user.action', undefined, function() {
   
})
登入後複製

注意,不要想當然的把undefined改為null,  即使 null == undefined, 傳null後,函數體內的async就是null不是true了。

以下幾點要注意:

1. 定義了預設參數後,函數的length屬性會減少,即有幾個預設參數不包含在length的計算當中

function calc(x=0, y=0) {
  // ...
  console.log(x, y)
}
function ajax(url, async=true, dataType="JSON") {
  // ...
  console.log(url, async, dataType)
}
console.log(calc.length); // 0
console.log(ajax.length); // 1

登入後複製

2. 不能用let和const再宣告預設值,var可以

function ajax(url="../user.action", async=true, success) {
  var url = ''; // 允许
  let async = 3; // 报错
  const success = function(){}; // 报错
}

登入後複製

另外比較有趣的是:預設參數可以不是一個值類型,它可以是一個函數呼叫

function getCallback() {
  return function() {
    // return code
  }
}
 
function ajax(url, async, success=getCallback()) {
  // ...
  console.log(url, async, success)
}
登入後複製

可以看到這裡參數success是一個函數調用,調用ajax時如果沒有傳第三個參數,則會執行getCallback函數,該函數返回一個新函數賦值給success。這是一個很強大的功能,給程式設計師一個很大的想像發揮空間。

例如,利用這個特性可以強制指定某參數必須傳,不傳就報錯

function throwIf() {
  throw new Error('少传了参数');
}
 
function ajax(url=throwIf(), async=true, success) {
  return url;
}
ajax(); // Error: 少传了参数
登入後複製

以上所述就是本文的全部內容了,希望大家能夠喜歡。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

C++ 函數宣告中的預設參數:全面解析其宣告和用法 C++ 函數宣告中的預設參數:全面解析其宣告和用法 May 02, 2024 pm 03:09 PM

C++中的預設參數提供函數參數指定預設值的功能,從而增強程式碼可讀性、簡潔性和靈活性。宣告預設參數:在函數宣告中將參數後面加上"="符號,後面接著預設值。用法:函數呼叫時,若未提供可選參數,則會使用預設值。實戰案例:計算兩個數之和的函數,一個參數必填,另一個可填且有預設值0。優點:增強可讀性、增加彈性、減少樣板程式碼。注意事項:只能在聲明中指定,必須位於末尾,類型必須相容。

如何優化 C++ 函數中預設參數和可變參數的使用 如何優化 C++ 函數中預設參數和可變參數的使用 Apr 20, 2024 am 09:03 AM

最佳化C++預設與可變參數函數:預設參數:允許函數使用預設值,減少冗餘。將預設參數放在最後以提高可讀性。使用constexpr預設參數以減少開銷。使用結構化綁定以提高複雜預設參數的可讀性。可變參數:允許函數接受數量不定的參數。盡量避免使用可變參數,並在必要時使用。使用std::initializer_list優化可變參數函數以提高效能。

C++ 預設參數的用法和優勢 C++ 預設參數的用法和優勢 Apr 18, 2024 pm 09:33 PM

是的,C++中的預設參數功能可讓您在函數呼叫時省略某些參數,當函數被呼叫且未提供這些參數時,則使用預設值,從而提升程式碼的靈活性、可讀性和可維護性。

C++ 函式中預設參數的注意事項 C++ 函式中預設參數的注意事項 Apr 20, 2024 am 11:09 AM

C++函式中預設參數需要注意:必須出現在參數清單末尾。不可為同一參數指定多個預設值。 vararg可變數量參數不可擁有預設值。預設參數不可被重載函數的參數共用。

C++ 函式的預設參數的使用方法是什麼? C++ 函式的預設參數的使用方法是什麼? Apr 19, 2024 pm 03:21 PM

預設參數允許函數在呼叫時指定預設值,簡化程式碼並提高維護性。預設參數的語法為:typefunction_name(parameter_list,typeparameter_name=default_value)。其中,type為參數類型,parameter_name為參數名稱,default_value為預設值。在範例中,add函數具有兩個參數,其中num2的預設值為0,呼叫函數時可僅指定num1,num2將使用預設值,或同時指定num1和num2。

PHP預設參數的妙用:提高程式碼效率的秘訣 PHP預設參數的妙用:提高程式碼效率的秘訣 Mar 24, 2024 am 10:33 AM

PHP是一種廣泛使用的伺服器端腳本語言,用於開發動態網頁和應用程式。在PHP中,使用預設參數可以大幅提高程式碼的效率和簡潔性。本文將探討如何利用PHP的預設參數功能,以實現更有效率的程式設計。 1.預設參數的概念在PHP函數中,我們可以為參數設定預設值。當函數呼叫時未提供參數值時,將會使用預設值來代替。這樣做可以簡化函數調用,減少冗餘程式碼,提高可讀性。 2.預設參數

PHP 函數的參數傳遞方式如何處理可選參數和預設參數? PHP 函數的參數傳遞方式如何處理可選參數和預設參數? Apr 15, 2024 pm 09:51 PM

參數傳遞方式:以值傳遞(基本型別)和依參考傳遞(複合型別)。可選參數:允許指定參數值,但不是必需的。預設參數:允許指定可選參數的預設值。實戰:透過範例函數展示如何使用可選和預設參數計算矩形面積。

C++ 函式中預設參數的使用場景分析 C++ 函式中預設參數的使用場景分析 Apr 19, 2024 pm 06:12 PM

預設參數用於簡化函數呼叫、提供可選功能和提高程式碼可讀性。具體場景包括:1.省略不常用的參數;2.為選用功能提供預設值;3.明確指定預設值提升程式碼可理解性。

See all articles