JSDoc: The Definitive Guide to Documenting Your JavaScript Code
Dec 16, 2024 am 07:34 AMJSDoc is a documentation tool for JavaScript that allows you to add typed and structured comments to your code. Similar to JavaDoc for Java, JSDoc not only helps document your code, but also improves the development experience with autocompletion and type information in modern editors like Visual Studio Code.
Why use JSDoc?
- Improves maintainability: Makes it easier to understand the code months later
- Smart autocomplete: IDEs can provide more accurate suggestions
- Automatic documentation: Generate HTML documentation from comments
- Type Validation: Provides type checking without the need for TypeScript
- Compatibility: Works with vanilla JavaScript and modern frameworks
Basic Syntax
Structure of a JSDoc Comment
JSDoc comments start with /**and end with*/:
/** * Calcula el área de un rectángulo. * @param {number} ancho - El ancho del rectángulo * @param {number} alto - El alto del rectángulo * @returns {number} El área del rectángulo */ function calcularArea(ancho, alto) { return ancho * alto; }
Main Tags
@param
Document the parameters of a function:
/** * @param {string} nombre - Nombre del usuario * @param {number} [edad] - Edad del usuario (opcional) * @param {Object} opciones - Opciones de configuración * @param {boolean} opciones.activo - Estado del usuario * @param {string} opciones.rol - Rol del usuario */ function crearUsuario(nombre, edad, opciones) { // Implementación }
@returns
Specifies the return value:
/** * @returns {Promise<User>} Promesa que resuelve con los datos del usuario */ async function obtenerUsuario() { // Implementación }
@typedef
Define custom types:
/** * @typedef {Object} Usuario * @property {string} id - ID único del usuario * @property {string} nombre - Nombre completo * @property {number} edad - Edad del usuario * @property {string[]} roles - Lista de roles asignados */ /** * @param {Usuario} usuario * @returns {boolean} */ function validarUsuario(usuario) { // Implementación }
@callback
Defines types for callback functions:
/** * @callback ValidatorCallback * @param {string} valor - Valor a validar * @returns {boolean} Resultado de la validación */ /** * @param {string} dato * @param {ValidatorCallback} validador */ function procesarDato(dato, validador) { if (validador(dato)) { // Procesar dato } }
Complex Types
Arrays and Objects
/** * @param {Array<string>} nombres - Lista de nombres * @param {Object.<string, number>} edades - Mapa de nombres a edades */ function procesarDatos(nombres, edades) { // Implementación }
Unions and Nullable Types
/** * @param {string|number} id - ID que puede ser string o número * @param {?string} descripcion - Descripción opcional (puede ser null) */ function buscarElemento(id, descripcion) { // Implementación }
Class Documentation
/** * Representa un vehículo genérico. * @class */ class Vehiculo { /** * Crea una instancia de Vehiculo. * @param {string} marca - Marca del vehículo * @param {string} modelo - Modelo del vehículo * @param {number} a?o - A?o de fabricación */ constructor(marca, modelo, a?o) { this.marca = marca; this.modelo = modelo; this.a?o = a?o; } /** * Calcula la edad del vehículo. * @returns {number} Edad en a?os */ obtenerEdad() { return new Date().getFullYear() - this.a?o; } }
Integration with VS Code
Project settings
Create a jsconfig.json file in the root of your project:
{ "compilerOptions": { "checkJs": true, "strictNullChecks": true, "strictFunctionTypes": true }, "exclude": ["node_modules", "dist"] }
Documentation Generation
JSDoc installation
npm install -g jsdoc
JSDoc configuration
Create a jsdoc.json file:
/** * Calcula el área de un rectángulo. * @param {number} ancho - El ancho del rectángulo * @param {number} alto - El alto del rectángulo * @returns {number} El área del rectángulo */ function calcularArea(ancho, alto) { return ancho * alto; }
HTML documentation generation
/** * @param {string} nombre - Nombre del usuario * @param {number} [edad] - Edad del usuario (opcional) * @param {Object} opciones - Opciones de configuración * @param {boolean} opciones.activo - Estado del usuario * @param {string} opciones.rol - Rol del usuario */ function crearUsuario(nombre, edad, opciones) { // Implementación }
Best Practices
- Be consistent: Maintain a uniform documentation style throughout the project
/** * @returns {Promise<User>} Promesa que resuelve con los datos del usuario */ async function obtenerUsuario() { // Implementación }
- Document side effects:
/** * @typedef {Object} Usuario * @property {string} id - ID único del usuario * @property {string} nombre - Nombre completo * @property {number} edad - Edad del usuario * @property {string[]} roles - Lista de roles asignados */ /** * @param {Usuario} usuario * @returns {boolean} */ function validarUsuario(usuario) { // Implementación }
- Use examples for complex cases:
/** * @callback ValidatorCallback * @param {string} valor - Valor a validar * @returns {boolean} Resultado de la validación */ /** * @param {string} dato * @param {ValidatorCallback} validador */ function procesarDato(dato, validador) { if (validador(dato)) { // Procesar dato } }
Tools and Plugins
- ESLint: Configure rules to validate documentation
- DocumentThis: VS Code extension to generate JSDoc automatically
- better-docs: Improved template for generated documentation
JSDoc is a powerful tool that significantly improves the quality and maintainability of your JavaScript code. With the right IDE support and documentation generation tools, you can create a more robust and maintainable codebase.
Recommended next steps:
- Configure JSDoc in your current project
- Start by documenting public functions
- Set up your editor to take advantage of autocomplete
- Implement automatic documentation generation in your CI/CD pipeline
Additional Resources
- Official JSDoc Documentation
- JSDoc CheatSheet
- TypeScript and JSDoc
The above is the detailed content of JSDoc: The Definitive Guide to Documenting Your JavaScript Code. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Java and JavaScript are different programming languages, each suitable for different application scenarios. Java is used for large enterprise and mobile application development, while JavaScript is mainly used for web page development.

JavaScriptcommentsareessentialformaintaining,reading,andguidingcodeexecution.1)Single-linecommentsareusedforquickexplanations.2)Multi-linecommentsexplaincomplexlogicorprovidedetaileddocumentation.3)Inlinecommentsclarifyspecificpartsofcode.Bestpractic

The following points should be noted when processing dates and time in JavaScript: 1. There are many ways to create Date objects. It is recommended to use ISO format strings to ensure compatibility; 2. Get and set time information can be obtained and set methods, and note that the month starts from 0; 3. Manually formatting dates requires strings, and third-party libraries can also be used; 4. It is recommended to use libraries that support time zones, such as Luxon. Mastering these key points can effectively avoid common mistakes.

JavaScriptispreferredforwebdevelopment,whileJavaisbetterforlarge-scalebackendsystemsandAndroidapps.1)JavaScriptexcelsincreatinginteractivewebexperienceswithitsdynamicnatureandDOMmanipulation.2)Javaoffersstrongtypingandobject-orientedfeatures,idealfor

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScripthassevenfundamentaldatatypes:number,string,boolean,undefined,null,object,andsymbol.1)Numbersuseadouble-precisionformat,usefulforwidevaluerangesbutbecautiouswithfloating-pointarithmetic.2)Stringsareimmutable,useefficientconcatenationmethodsf

Event capture and bubble are two stages of event propagation in DOM. Capture is from the top layer to the target element, and bubble is from the target element to the top layer. 1. Event capture is implemented by setting the useCapture parameter of addEventListener to true; 2. Event bubble is the default behavior, useCapture is set to false or omitted; 3. Event propagation can be used to prevent event propagation; 4. Event bubbling supports event delegation to improve dynamic content processing efficiency; 5. Capture can be used to intercept events in advance, such as logging or error processing. Understanding these two phases helps to accurately control the timing and how JavaScript responds to user operations.

Java and JavaScript are different programming languages. 1.Java is a statically typed and compiled language, suitable for enterprise applications and large systems. 2. JavaScript is a dynamic type and interpreted language, mainly used for web interaction and front-end development.
