學習紀錄 | JSDoc 是什麼?怎麼寫?

更新於 2024/08/03閱讀時間約 7 分鐘


什麼是 JSDoc

JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也能達成型別檢查的用途,非常方便好用!


寫 JSDoc 的第一步

JSDoc 註解的方式會以/** 開頭, */ 結尾,中間使用不同的 @tag 來定義函式、描述詞、傳入參數、回傳值...等內容,每個函式都需要各自寫成一塊,不能全部寫在同個註解內哦~

註解會寫在變數或函式的上方,直接看一個範例吧,先了解一下大致的撰寫方式,等等再詳細介紹常用的 @tag 有哪些,範例:

/**
* @function add
* @description add two number
* @param {Number} num1 - 後面可以加上對 num1 的描述
* @param {Number} num2
* @returns {Number}
*/
function add(num1, num2) {
return num1 + num2
}

滑鼠移動到 add() 的時候,就能看到相關的註解內容囉!

JSDoc 提示

JSDoc 提示


文件生成

註解撰寫完成後,總要看到成果吧,於是我們可以先來簡單生成文件,看看文件長什麼樣

  • 在專案內安裝 JSDoc 套件 npm install jsdoc
  • 使用指令jsdoc + 文件路徑,即可編譯並自動產生一個名為 out 的文件夾
    • 可自行新增 jsdoc.config.json 檔案來修改文件生成的設定
    • 也可在 package.json 的 script 中,加入生成文件的指令 "doc": "jsdoc -c jsdoc.config.json"
out 資料夾

out 資料夾


從 out 文件夾內開啟剛剛那份檔案,就可以看到文件內有 add function 啦!如果不喜歡原生文件的樣式,也可以使用其他套件(如:clean-jsdoc-theme)來客製化你的JSDoc哦~

JSDoc 文件

JSDoc 文件


接下來再熟悉一些常用的@tag ,掌握 JSDoc 就不難啦~剛開始學 JavaScript 時,都會先宣告常數與變數,以及學習不同類型的型別,再來學 function 對吧,以下會按照同樣的方式來介紹常用的@tag


定義常數&型別

  • @constant / @const 用來定義常數,與使用 const 定義常數的概念相同,定義後的值不可被修改
  • @type {Type} 用來定義型別,變數不需要使用額外標籤,直接定義型別即可,{} 內可以是基本型別或其他客製化組合的類型(@typedef 後面會介紹)
/**
* @const name
* @type {String}
*/
const name = 'Amber'

/**
* @description favorite color
* @type {String} color
*/
let color = 'yellow'
  • @const 可與 @type 合併撰寫
/**
* @const {String} name
*/
const name = 'Amber'
  • @property 定義物件屬性,如果屬性是可選的,放在括號中 ex @property {String} [favoriteColor]
/**
* @type {Object} person
* @property {String} name
* @property {String} [favoriteColor]
*/
const person = {
name: 'Amber',
favoriteColor: 'yellow'
}



定義函式

@function 定義函式
@description 函式的描述內容
@param 函式的參數
@returns 函式返回值
@example 寫一些函式 input/output 範例參考

/**
* @typedef {Object} myObject
* @property {String} name
* @property {Number} age
* @property {Boolean} isDeveloper
*/

/**
* @function createPerson
* @description Create a person object
* @param {String} name - The name of the person
* @param {Number} age - The age of the person
* @param {Boolean} isDeveloper - The developer status of the person
* @returns {myObject} - The person object
*/
function createPerson(name, age, isDeveloper) {
return {
name:name,
age,
isDeveloper
}
}



定義客製化的型別

@typedef {Type} 定義客製化型別

有仔細看的讀者應該會發現,上面 createPerson函式的 return 值是一個物件,但是我給他定義的型別是 myObject 吧,這就是客製化型別 @typedef 的用途!如果有巢狀物件需要定義時,可以使用 @typedef 先定義客製化物件內容,再用 @type 來定義物件型別,將型別指定為 typedef 所定義的內容,再來看一個範例吧:

/**
* @typedef {Object} Class
* @property {String} classTitle
* @property {String} teacher
* @property {Number} classroom
*/

/**
* @type {Array<Class>} myClass
*/

const myClass = [
{
classTitle: 'math',
teacher 'mathTeacher',
classroom: 102
},
{
classTitle: 'art',
teacher 'artTeacher',
classroom: 105
}
]



其他常用 tag

@module 將當前文件定義為模組,文件內所有參照都屬於這個 module
@global 跨檔案使用@typedef,將會忽略程式碼本身作用域,定義為全域皆可使用 @throws 定義 function 會拋出的錯誤
@see 表示可以參考另一個文件內容或外部資源,外部資源用 @link 連結
@class /@constructor 將內容定義為 Class,通常會自動識別,不需要特別撰寫定義


那 JSDoc 介紹差不多就到這邊啦,我是Amber,前端學習中,歡迎交流討論~🧸


參考資料

沒辦法用 TypeScript?別擔心,你還可以寫 JSDoc 標注類型
前端使用 JSDoc 生成文件

Step-by-Step Guide to JSDoc and TypeScript in Modern JavaScript Projects in 15 Minutes!

avatar-img
22會員
22內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Amber hh的沙龍 的其他內容
剛開始學前端都是跟著六角的課程進度走,雖然知道自己不會的技術很多,但至少有明確的學習目標,也會定期產出結果,當時的焦慮來源只覺得時間總是不夠,殊不知真正踏入實務工作後,除了焦慮時間不夠之外,甚至還有點迷失了方向。 轉職後的公司僅一人前端,我沒有 mentor 帶領,也找不到可以效仿學習的 Ro
先說一下我的背景,非本科系從 2022/3 開始接觸到前端領域,在摸索過程中遇到六角學院,買了 HTML 和 CSS 課程從基礎學起。
在 IG 上看到一位前端大大用 Google Apps Script + Line bot 替自己的球隊安排了球經,覺得很有趣,想來玩看看
前幾天和一起轉職的同學分享工作近況的時候,得知他們公司切版時,大部分會手刻,比較少用現成的 UI 套件工具,像輪播效果也是手刻,讓我覺得有點挑戰,決定也來自己手刻一個輪播工具!
之前在【什麼是網路請求(HTTP response)】筆記裡有提到,網路請求遇到 CORS 跨域問題,在開發時可以透過 vite 的反向代理來解決,那麼什麼是反向代理,有反向代理的話是不是也有正向代理呢?
之前分享過【網路請求帶參數的方式】,開發者可以透過 URL 代入參數,來向伺服器請求特定的資源,我們當然也可以擷取 URL 的內容,來做為後續開發的判斷條件,這篇就來記錄一下,網址(URL) 和域名(Domain) 是什麼,以及如何取得網址的參數吧! 我們常說的網址連結 URL 完整名稱是 U
剛開始學前端都是跟著六角的課程進度走,雖然知道自己不會的技術很多,但至少有明確的學習目標,也會定期產出結果,當時的焦慮來源只覺得時間總是不夠,殊不知真正踏入實務工作後,除了焦慮時間不夠之外,甚至還有點迷失了方向。 轉職後的公司僅一人前端,我沒有 mentor 帶領,也找不到可以效仿學習的 Ro
先說一下我的背景,非本科系從 2022/3 開始接觸到前端領域,在摸索過程中遇到六角學院,買了 HTML 和 CSS 課程從基礎學起。
在 IG 上看到一位前端大大用 Google Apps Script + Line bot 替自己的球隊安排了球經,覺得很有趣,想來玩看看
前幾天和一起轉職的同學分享工作近況的時候,得知他們公司切版時,大部分會手刻,比較少用現成的 UI 套件工具,像輪播效果也是手刻,讓我覺得有點挑戰,決定也來自己手刻一個輪播工具!
之前在【什麼是網路請求(HTTP response)】筆記裡有提到,網路請求遇到 CORS 跨域問題,在開發時可以透過 vite 的反向代理來解決,那麼什麼是反向代理,有反向代理的話是不是也有正向代理呢?
之前分享過【網路請求帶參數的方式】,開發者可以透過 URL 代入參數,來向伺服器請求特定的資源,我們當然也可以擷取 URL 的內容,來做為後續開發的判斷條件,這篇就來記錄一下,網址(URL) 和域名(Domain) 是什麼,以及如何取得網址的參數吧! 我們常說的網址連結 URL 完整名稱是 U
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
小小車神培訓班是一個針對6-12歲學員的汽車相關營隊,課程內容包括了汽車的基本概念和汽車工程技術,讓孩子在輕鬆的學習過程中培養對汽車的興趣和了解。本文介紹國小三年級孩童,參加營隊的真實心得與評價,以及媽媽的心情紀錄。
Thumbnail
🍀🍀🍀fumi老師:❤️❤️❤️ 🥰🥰🥰今天的課程著重在靈氣水晶陣運用在占卜🔮的準確度練習,在靈氣大師階的課程中,如何在療癒的深度與廣度之間取得平衡點,對於療癒師來說很重要,對於客戶來說,如何能夠在最短的時間內解決問題🙋‍♀️,才是客戶真正關心的重點。 🙋‍♀️🙋‍♀️🙋‍
Thumbnail
這篇文章將介紹開啟阿卡西紀錄的過程,並分享心得和經驗。從好奇到實際練習開啟紀錄,再到進入高頻意識狀態,將逐一談及,並分享工作坊的報名經驗和意識頻率遇到的奇妙事情,以及諮詢通靈林老師的經歷。
Thumbnail
🍀🍀🍀fumi老師:❤️❤️❤️ 🥰🥰🥰靈氣療癒學習📑的關卡,每個人都會有卡關的問題嗎? 📧📧📧答案是:多多少少都有,只是療癒師自己是否能夠覺察得到?還有如果卡住了,是否有人可以救援呢? 🪭🪭🪭今日同學特別來練習,對於遠距離的靈氣療癒的這項技術,一直都還有一個卡住的關
Thumbnail
濃縮的精華課程 這次的塗鴉筆記工作坊因為只有 90分鐘(之前是兩次 x 兩小時的),所以備課時我絞盡腦汁的濃縮(「簡潔」就是設計最難的地方啊!),試著將一些塗鴉筆記技巧與學習策略融入在一個小專題裡,讓老師們應用五大元素來創作屬於自己的「情緒精靈」,過程中再提供一些相應的小技巧,例如:要將情緒擬人化,
Thumbnail
🍀🍀🍀fumi老師:❤️❤️❤️ 在靈氣的課程學習當中,我最重視的除了「靈氣療癒的技術」練習之外,再來就是「神聖空間的技術」練習。 設立神聖空間結界的必要在於保護自身與居住環境,好處包括:防止負面能量入侵、增強正面能量、清理環境中負面情緒….等等。 一個真正有效的神聖空間,會在身處當下的人、家
Thumbnail
市面上介紹"如何高效學習"的各種書籍很多,眾多的"學習方法"會否讓你感到有些不知從何著手呢?這篇是我針對"如何高效學習"的專題研讀,透過學習、實踐各種高效學習方法的完整自學歷程紀錄與分享。
哈囉大家好~~~我是來自甜瑪星空的獨角獸,今天的你過得如何呢? 在今天分享內容之前,想先問問大家兩個問題! 1.你曾經寫過讓自己印象深刻的文字作業嗎? 2.在撰寫的時候你有什麼樣的體驗呢? 好啦~廢話不多說,正文開始! 復仇大計 伊波拉的指引 禁不住好奇心,我忍不住問道:「那你怎麼會在這裡?」
過去雖然一直非常熱愛閱讀,但我自己的學習都是非常無結構、無方法、無效能的。如今自己孩子上了小學, 為了孩子不再走錯誤的學習道路、被要求痛苦的硬背讀死書,也為了我自己能平反,我決心重新把 『如何有效學習』這檔事給弄清楚!
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
小小車神培訓班是一個針對6-12歲學員的汽車相關營隊,課程內容包括了汽車的基本概念和汽車工程技術,讓孩子在輕鬆的學習過程中培養對汽車的興趣和了解。本文介紹國小三年級孩童,參加營隊的真實心得與評價,以及媽媽的心情紀錄。
Thumbnail
🍀🍀🍀fumi老師:❤️❤️❤️ 🥰🥰🥰今天的課程著重在靈氣水晶陣運用在占卜🔮的準確度練習,在靈氣大師階的課程中,如何在療癒的深度與廣度之間取得平衡點,對於療癒師來說很重要,對於客戶來說,如何能夠在最短的時間內解決問題🙋‍♀️,才是客戶真正關心的重點。 🙋‍♀️🙋‍♀️🙋‍
Thumbnail
這篇文章將介紹開啟阿卡西紀錄的過程,並分享心得和經驗。從好奇到實際練習開啟紀錄,再到進入高頻意識狀態,將逐一談及,並分享工作坊的報名經驗和意識頻率遇到的奇妙事情,以及諮詢通靈林老師的經歷。
Thumbnail
🍀🍀🍀fumi老師:❤️❤️❤️ 🥰🥰🥰靈氣療癒學習📑的關卡,每個人都會有卡關的問題嗎? 📧📧📧答案是:多多少少都有,只是療癒師自己是否能夠覺察得到?還有如果卡住了,是否有人可以救援呢? 🪭🪭🪭今日同學特別來練習,對於遠距離的靈氣療癒的這項技術,一直都還有一個卡住的關
Thumbnail
濃縮的精華課程 這次的塗鴉筆記工作坊因為只有 90分鐘(之前是兩次 x 兩小時的),所以備課時我絞盡腦汁的濃縮(「簡潔」就是設計最難的地方啊!),試著將一些塗鴉筆記技巧與學習策略融入在一個小專題裡,讓老師們應用五大元素來創作屬於自己的「情緒精靈」,過程中再提供一些相應的小技巧,例如:要將情緒擬人化,
Thumbnail
🍀🍀🍀fumi老師:❤️❤️❤️ 在靈氣的課程學習當中,我最重視的除了「靈氣療癒的技術」練習之外,再來就是「神聖空間的技術」練習。 設立神聖空間結界的必要在於保護自身與居住環境,好處包括:防止負面能量入侵、增強正面能量、清理環境中負面情緒….等等。 一個真正有效的神聖空間,會在身處當下的人、家
Thumbnail
市面上介紹"如何高效學習"的各種書籍很多,眾多的"學習方法"會否讓你感到有些不知從何著手呢?這篇是我針對"如何高效學習"的專題研讀,透過學習、實踐各種高效學習方法的完整自學歷程紀錄與分享。
哈囉大家好~~~我是來自甜瑪星空的獨角獸,今天的你過得如何呢? 在今天分享內容之前,想先問問大家兩個問題! 1.你曾經寫過讓自己印象深刻的文字作業嗎? 2.在撰寫的時候你有什麼樣的體驗呢? 好啦~廢話不多說,正文開始! 復仇大計 伊波拉的指引 禁不住好奇心,我忍不住問道:「那你怎麼會在這裡?」
過去雖然一直非常熱愛閱讀,但我自己的學習都是非常無結構、無方法、無效能的。如今自己孩子上了小學, 為了孩子不再走錯誤的學習道路、被要求痛苦的硬背讀死書,也為了我自己能平反,我決心重新把 『如何有效學習』這檔事給弄清楚!