One place for hosting & domains

      Cómo monitorear los anuncios y las rutas de BGP utilizando BGPalerter en Ubuntu 18.04


      El autor seleccionó el COVID-19 Relief Fund para que reciba una donación como parte del programa Write for DOnations.

      Introducción

      BGP (Protocolo de puerta de enlace de borde) es uno de los protocolos principales responsable de redirigir paquetes a través de Internet; por lo tanto, si presenta errores, se pueden producir interrupciones importantes. Por ejemplo, en 2019, un pequeño proveedor de servicios de Internet hizo una mala configuración de BGP que, lamentablemente, se propagó de manera ascendente y dejó importantes partes de Cloudflare y AWS sin conexión durante más de una hora.  Además, hace un año, se realizó un ataque a BGP para interceptar el tráfico a un proveedor de monederos de criptomonedas y robar los fondos de clientes desprevenidos.

      BGPalerter es una herramienta de monitoreo de la red de BGP de código abierto que puede proporcionar alertas en tiempo real sobre la actividad de BGP, incluso la visibilidad de rutas y los anuncios de nuevas rutas, así como actividades potencialmente nefastas, como intercepciones o fugas en las rutas. BGPalerter ingiere automáticamente la información de redireccionamiento de la red disponible públicamente, lo que significa que no necesita tener ningún nivel de acceso con privilegios ni integración en las redes que quiere controlar.

      Nota: BGPalerter ingiere automáticamente la información de redireccionamiento de la red disponible públicamente, lo que significa que no necesita tener ningún nivel de acceso con privilegios ni integración en las redes que quiere controlar. Todo el monitoreo cumple plenamente con la Ley de Uso Indebido de Computadoras (Computer Misuse Act), la Ley de Fraude y Abuso de Computadoras (Computer Fraud and Abuse Act), y otras leyes similares.  Sin embargo, se recomienda revelar de forma responsable cualquier hallazgo relevante al operador de la red afectado.

      En este tutorial, instalará y configurará BGPalerter para monitorear sus redes importantes, a fin de detectar actividades potencialmente sospechosas.

      Requisitos previos

      Para completar este tutorial, necesitará lo siguiente:

      Para cada dispositivo o red, necesitará identificar la dirección IP individual, el intervalo de la dirección IP o el número de sistema autónomo del que es parte. Esto se abarca en el paso 1.

      Una vez que tenga todo esto listo, inicie sesión en su servidor como non-root user.

      Paso 1: Identificar las redes que se quieren monitorear

      En este paso, identificará los detalles pertinentes de las redes que quiere monitorear.

      BGPalerter puede monitorear sobre la base de direcciones IP individuales o prefijos de red. También puede monitorear redes enteras sobre la base de su número de sistema autónomo (AS), que es un identificador global único de una red propiedad de una entidad administrativa en particular.

      Para encontrar esta información, puede utilizar el servicio de búsqueda IP-to-ASN de WHOIS, proporcionado por el servicio de inteligencia de amenazas Team Cymru. Se trata de un servidor de WHOIS personalizado diseñado para buscar información de dirección IP y enrutamiento de red.

      Si no tiene whois instalado, puede instalarlo usando el siguiente comando:

      • sudo apt update
      • sudo apt install whois

      Una vez que haya confirmado que whois está instalado, comience por realizar una búsqueda de la dirección IP de su propio servidor, utilizando el argumento -h para especificar un servidor personalizado:

      • whois -h whois.cymru.com your-ip-address

      Esto generará un resultado similar al siguiente, que muestra el nombre y el número de AS del que su servidor es parte. Normalmente, será el AS de su proveedor de alojamiento del servidor, por ejemplo, DigitalOcean.

      Output

      AS | IP | AS Name 14061 | your-ip-address | DIGITALOCEAN-ASN, US

      A continuación, puede realizar una búsqueda para identificar el prefijo de la red o el intervalo del que su servidor es parte. Para hacerlo, agregue el argumento -p a su solicitud:

      • whois -h whois.cymru.com " -p your-ip-address"

      El resultado será muy similar al comando anterior, pero, ahora, mostrará el prefijo de dirección IP al que pertenece la dirección IP de su servidor:

      Output

      AS | IP | BGP Prefix | AS Name 14061 | your-ip-address | 157.230.80.0/20 | DIGITALOCEAN-ASN, US

      Por último, puede buscar más detalles del AS del que forma parte su servidor, incluyendo la región geográfica y la fecha de asignación.

      Sustituya el número de AS que identificó usando los comandos anteriores. Utiliza el argumento -v para habilitar el resultado detallado, lo que garantiza que se muestren todos los detalles relevantes:

      • whois -h whois.cymru.com " -v as14061"

      El resultado mostrará más información sobre el AS:

      Output

      AS | CC | Registry | Allocated | AS Name 14061 | US | arin | 2012-09-25 | DIGITALOCEAN-ASN, US

      identificó detalles clave sobre las redes que quiere monitorear. Tome nota de estos detalles en algún lugar, ya que los necesitará más adelante. A continuación, comenzará a configurar BGPalerter.

      Paso 2: Crear un usuario sin privilegios para BGPalerter

      En este paso, creará una nueva cuenta de usuario sin privilegios para BGPalerter, dado que el programa no necesita ejecutarse con privilegios sudo/root.

      Primero, cree un usuario nuevo con contraseña deshabilitada:

      • sudo adduser --disabled-password bgpalerter

      No necesita configurar una contraseña o una clave de SSH, dado que solo utilizará este usuario como una cuenta de servicio para ejecutar/mantener BGPalerter.

      Inicie sesión con el usuario nuevo utilizando su:

      Ahora, está conectado con su usuario nuevo:

      bgpalerter@droplet:/home/user$
      

      Utilice el comando cd para dirigirse al directorio de inicio de su usuario nuevo:

      bgpalerter@droplet:/home/user$ cd
      bgpalerter@droplet:~$
      

      Creó un usuario sin privilegios nuevo para BGPalerter. A continuación, instalará y configurará BGPalerter en su sistema.

      Paso 3: Instalar y configurar BGPalerter

      En este paso, instalará y configurará BGPalerter. Asegúrese de seguir conectado con su usuario sin privilegios nuevo.

      Primero, debe identificar la última versión de BGPalerter, a fin de asegurarse de descargar la más reciente. Diríjase a la página de Lanzamientos de BGPalerter y copie el enlace de descarga de la versión de Linux x64 más reciente.

      Ahora, puede descargar una copia de BGPalerter usando wget, asegurándose de sustituir el enlace de descarga correcto:

      • wget https://github.com/nttgin/BGPalerter/releases/download/v1.24.0/bgpalerter-linux-x64

      Una vez que el archivo haya terminado de descargarse, márquelo como ejecutable:

      • chmod +x bgpalerter-linux-x64

      A continuación, compruebe que BGPalerter se haya descargado e instalado correctamente comprobando el número de la versión:

      • ./bgpalerter-linux-x64 --version

      Esto dará como resultado el número de la versión actual:

      Output

      1.24.0

      Para poder ejecutar BGPalerter adecuadamente, deberá definir las redes que desea monitorear en un archivo de configuración. Cree y abra el archivo prefixes.yml en su editor de texto favorito:

      En este archivo de configuración, especificará cada una de las direcciones IP individuales, los intervalos de dirección IP y los números de AS que quiere monitorear.

      Añada el siguiente ejemplo y ajuste los valores de configuración según sea necesario usando la información de la red que identificó en el paso 1:

      ~/prefixes.yml

      your-ip-address/32:
        description: My Server
        asn:
          - 14061
        ignoreMorespecifics: false
      
      157.230.80.0/20:
        description: IP range for my Server
        asn:
          - 14061
        ignoreMorespecifics: false
      
      options:
        monitorASns:
          '14061':
            group: default
      

      Puede monitorear todos los intervalos de dirección IP o números de AS que quiera. Para monitorear direcciones IP individuales, represéntelas utilizando /32 para IPv4 y /128 para IPv6.

      El valor ignoreMorespecifics se utiliza para determinar si BGPalerter debe ignorar la actividad de las rutas más específicas (pequeñas) que la que está monitoreando. Por ejemplo, si está monitoreando /20 y se detecta un cambio de enrutamiento para /24 en su interior, se considera que es más específica. En la mayoría de los casos, no es recomendable ignorarlas si está monitoreando una red grande con varios prefijos de cliente delegados, sin embargo, puede ayudar a reducir interferencias de fondo.

      Ahora, puede ejecutar BGPalerter por primera vez para comenzar a monitorear sus redes:

      Si BGPalerter se inicia correctamente, verá un resultado similar al siguiente. Tenga en cuenta que, a veces, el monitoreo puede tardar unos minutos en iniciarse:

      Output

      Impossible to load config.yml. A default configuration file has been generated. BGPalerter, version: 1.24.0 environment: production Loaded config: /home/bgpalerter/config.yml Monitoring 157.230.80.0/20 Monitoring your-ip-address/32 Monitoring AS 14061

      BGPalerter se seguirá ejecutando hasta que lo detenga usando Ctrl+C.

      En el siguiente paso, interpretará algunas de las alertas que BGPalerter puede generar.

      Paso 4: Interpretar alertas de BGPalerter

      En este paso, revisará algunas alertas de BGPalerter de ejemplo. BGPalerter emitirá alertas en la fuente de salida principal, y también, de forma opcional, en cualquier otro extremo de información que pueda configurarse dentro de config.yml, como se describe en la documentación de BGPalerter.

      De manera predeterminada, BGPalerter monitorea y alerta sobre lo siguiente:

      • Intercepciones de ruta: se produce cuando un AS anuncia un prefijo que no está permitido, lo que provoca que el tráfico se enrute de forma errónea. Puede ser un ataque deliberado o un error de configuración accidental.

      • Pérdida de visibilidad de la ruta: una ruta se considera visible cuando la mayoría de los enrutadores de BGP de Internet pueden redirigir de forma fiable hacia ella. La pérdida de visibilidad significa que su red no está disponible, por ejemplo, si su emparejamiento de BGP ha dejado de funcionar.

      • Nuevos anuncios de subprefijos: sucede cuando un AS comienza a anunciar un prefijo que es más pequeño de lo que se espera. Esto puede indicar un cambio de configuración previsto, un error de configuración accidental o, en algunos casos, un ataque.

      • Actividad en su AS: normalmente, se refiere a anuncios de rutas nuevas. Una ruta se considera “nueva” si BGPalerter todavía no la conoce.

      A continuación, se presentan algunas alertas de ejemplo, junto con una descripción breve de su significado:

      Alert #1

      The prefix 203.0.113.0/24 is announced by AS64496 instead of AS65540
      

      Esta alerta muestra pruebas de una intercepción de la ruta, donde AS64496 anunció 203.0.113.0/24 cuando se esperaba que se anuncie AS65540. Esto es un claro indicio de un error de configuración que conduce a una fuga de la ruta o a una intercepción deliberada de un atacante.

      Alert #2

      The prefix 203.0.113.0/24 has been withdrawn. It is no longer visible from 6 peers
      

      Esta alerta indica que la red 203.0.113.0/24 ya no está visible. Esto puede deberse a un problema de enrutamiento previo o a un fallo de energía en un enrutador.

      Alert #3

      A new prefix 203.0.113.0/25 is announced by AS64496. It should be instead 203.0.113.0/24 announced by AS64496
      

      Esta alerta indica que se anunció un prefijo más específico en un caso en el que no estaba previsto, por ejemplo, si se anunció /25 cuando se esperaba /24. Es muy probable que esto sea un error de configuración, sin embargo, en algunos casos, puede indicar la intercepción de la ruta.

      Alert #4

      AS64496 is announcing 192.0.2.0/24 but this prefix is not in the configured list of announced prefixes
      

      Por último, esta alerta indica que AS64496 anunció un prefijo que BGPalerter todavía no conoce. Esto podría deberse a que usted está anunciando legítimamente un nuevo prefijo o podría ser un indicio de un error de configuración que haya provocado que anunciara accidentalmente un prefijo propiedad de otra persona.

      En este paso, revisó algunas alertas de BGPalerter de ejemplo. A continuación, configurará BGPalerter para que se ejecute de forma automática en el arranque.

      Paso 5: Iniciar BGPalerter en el arranque

      En este último paso, configurará BGPalerter para que se ejecute en el arranque.

      Asegúrese de seguir conectado con su usuario sin privilegios nuevo y, luego, abra el editor de crontab:

      Luego, añada la siguiente línea a la parte inferior del archivo de crontab:

      crontab

      @reboot sleep 10; screen -dmS bgpalerter "./bgpalerter-linux-x64"
      

      Cada vez que su sistema se arranque, esto creará una sesión screen separada denominada ‘bgpalerter’ en la que se iniciará BGPalerter.

      Guarde y salga del editor de crontab. Ahora, es conveniente que reinicie su sistema para asegurarse de que BGPalerter se inicie correctamente en el arranque.

      Primero, cierre la sesión de su usuario de BGPalerter:

      Luego, proceda con un reinicio normal del sistema:

      Una vez que su sistema se haya reiniciado, vuelva a iniciar sesión en su servidor y utilice su para volver a acceder a su usuario de BGPalerter:

      Luego, puede unirse a la sesión en cualquier momento para ver el resultado de BGPalerter:

      En este último paso, configuró BGPalerter para que se ejecute en el arranque.

      Conclusión

      En este artículo, configuró BGPalerter y lo utilizó para monitorear cambios de enrutamiento de BGP en las redes.

      Si quiere hacer que BGPalerter sea más fácil de usar, puede configurarlo para que envíe alertas a un canal de slack a través de un webhook:

      Si quiere obtener más información sobre BGP, pero no tiene acceso a un entorno de producción de BGP, puede utilizar DN42 para realizar pruebas con BGP en un entorno seguro y aislado:



      Source link

      Sysadmin eBook: Cómo hacer funcionar los servidores


      Descargue todo el EBook

      Libro electrónico Cómo hacer funcionar los servidores: Guía práctica para la administración de sistemas en formato EPUB

      Libro electrónico Cómo hacer funcionar los servidores: Guía práctica para la administración de sistemas en formato PDF

      Introducción al libro electrónico

      En este libro, se destacan las habilidades prácticas de los administradores de sistemas, las arquitecturas comunes que encontrará y las mejores prácticas que se aplican a la automatización y la ejecución de sistemas a cualquier escala, desde una computadora portátil o un servidor hasta 1000 o más.  Está diseñado para ayudar a orientarlo dentro de la disciplina, y esperamos que lo anime a aprender más sobre la administración de sistemas.

      Este libro se basa en el plan de estudios Cómo hacer funcionar servidores: guía práctica para la administración de sistemas Linux, disponible en la comunidad de DigitalOcean. Su estructura se basa en algunos temas centrales:

      1. Temas introductorios

      2. Pilas de tecnología LAMP y LEMP

      3. Proteger sus servidores

      4. Automatización con Ansible

      5. Control de versiones e integración continua

      Puede elegir los temas de este libro que le interesen y explorarlos usando estos capítulos como guía. Trabajar con este libro lo expondrá a una amplia variedad de tecnologías, términos técnicos y enfoques conceptuales para administrar servidores de Linux. Puede trabajar con cada capítulo o sección a su propio ritmo y en cualquier orden que desee.

      Descargar el libro electrónico

      Puede descargar el libro electrónico en formato EPUB o PDF siguiendo los enlaces que se muestran a continuación.

      Descargue todo el EBook

      Libro electrónico Cómo hacer funcionar los servidores: Guía práctica para la administración de sistemas en formato EPUB

      Libro electrónico Cómo hacer funcionar servidores: guía práctica para la administración de sistemas en formato PDF

      Para obtener recursos adicionales de administración de sistemas que lo ayuden a comenzar, y para participar en la comunidad de DigitalOcean de otros desarrolladores y administradores, consulte nuestra creciente biblioteca de tutoriales, preguntas y proyectos con la etiqueta “Introducción”.



      Source link

      Información sobre los parámetros predeterminados en JavaScript


      El autor seleccionó el COVID-19 Relief Fund para que reciba una donación como parte del programa Write for DOnations.

      Introducción

      En ECMAScript 2015, se introdujeron parámetros de función predeterminados en el lenguaje JavaScript. Permiten a los desarrolladores inicializar una función con valores predeterminados si no se proporcionan argumentos para invocarla. El hecho de inicializar parámetros de función de esta manera hace que sus funciones sean más fáciles de leer y menos propensas a errores, y proporciona su comportamiento predeterminado. Lo ayudará a evitar los errores que se originan al pasar argumentos undefined y de desestructurar objetos que no existen.

      A lo largo de este artículo, revisará la diferencia entre parámetros y argumentos, aprenderá a usar parámetros predeterminados en funciones, conocerá maneras alternativas de admitir parámetros predeterminados y aprenderá los tipos de valores y expresiones que pueden usarse como parámetros predeterminados. También, verá ejemplos que demuestran cómo funcionan los parámetros predeterminados en JavaScript.

      Argumentos y parámetros

      Antes de explicar los parámetros de función predeterminados, es importante comprender los valores que pueden adoptar estos parámetros por defecto. Por eso, primero revisaremos la diferencia entre los argumentos y los parámetros de una función. Si desea obtener más información sobre esta distinción, lea el artículo anterior de nuestra serie de JavaScript Cómo definir funciones en JavaScript.

      En el siguiente bloque de código, creará una función que devuelve el cubo de un número dado que se define como x:

      // Define a function to cube a number
      function cube(x) {
        return x * x * x
      }
      

      La variable x de este ejemplo es un parámetro, una variable con nombre que se pasa a una función. Los parámetros siempre deben encontrarse en una variable y nunca deben tener un valor directo.

      Observé el siguiente bloque de código, que invoca la función cube que acaba de crear:

      // Invoke cube function
      cube(10)
      

      Esto generará el siguiente resultado:

      Output

      1000

      En este caso, 10 es un argumento, es decir, un valor que se pasa a una función cuando se la invoca. El valor también se suele encontrar dentro de una variable, como se puede observar en el siguiente ejemplo:

      // Assign a number to a variable
      const number = 10
      
      // Invoke cube function
      cube(number)
      

      El resultado es el mismo:

      Output

      1000

      Si una función que espera un argumento no lo recibe, usará implícitamente el valor undefined:

      // Invoke the cube function without passing an argument
      cube()
      

      El resultado es el siguiente:

      Output

      NaN

      En este caso, cube() intenta calcular el valor de undefined * undefined * undefined, lo que da como resultado NaN o “not a number”. Para obtener más información al respecto, consulte la sección de números en Información sobre los tipos de datos en JavaScript.

      A veces, este comportamiento automático de las funciones puede ser problemático. En algunos casos, puede ser conveniente que el parámetro tenga un valor, incluso si no se pasó ningún argumento a la función. Esos son los casos en los que la función parámetros predeterminados resulta útil, un tema que se tratará en la siguiente sección.

      Sintaxis de los parámetros predeterminados

      Con la incorporación de parámetros predeterminados de ES2015, ahora, puede asignar un valor predeterminado a cualquier parámetro, que la función usará en vez de undefined cuando se la invoque sin argumento. En esta sección, primero, se indicará el procedimiento manual y, luego, se brindará orientación para definir los parámetros predeterminados.

      Sin parámetros predeterminados, debería buscar específicamente los valores undefined para establecer valores predeterminados, tal como se indica en este ejemplo:

      // Check for undefined manually
      function cube(x) {
        if (typeof x === 'undefined') {
          x = 5
        }
      
        return x * x * x
      }
      
      cube()
      

      Aquí, se usa una instrucción condicional para corroborar si el valor se proporcionó automáticamente como undefined y, luego, se establece el valor de x en 5. Se obtendrá el siguiente resultado:

      Output

      125

      Por el contrario, si se usan parámetros predeterminados, se logra el mismo objetivo con mucho menos código. Puede establecer un valor predeterminado para el parámetro en cube al asignarle el operador de asignación de equivalencia (=), resaltado en el siguiente ejemplo:

      // Define a cube function with a default value
      function cube(x = 5) {
        return x * x * x
      }
      

      Ahora, cuando la función cube se invoque sin argumento, asignará 5 a x y mostará el cálculo en vez de NaN:

      // Invoke cube function without an argument
      cube()
      

      Output

      125

      Seguirá funcionando según lo previsto cuando se pase un argumento e ignorará el valor predeterminado:

      // Invoke cube function with an argument
      cube(2)
      

      Output

      8

      Sin embargo, una salvedad a tener en cuenta es que el valor del parámetro predeterminado también anulará el valor undefined explícito que se pase como argumento a una función, como se demuestra a continuación:

      // Invoke cube function with undefined
      cube(undefined)
      

      Se obtendrá un cálculo con x igual a 5:

      Output

      125

      En este caso, se calcularon los valores de los parámetros predeterminados y el valor undefined explícito no los anuló.

      Ahora que tiene una idea de la sintaxis básica de los parámetros predeterminados, en la sección siguiente, se indicará cómo funcionan con distintos tipos de datos.

      Tipos de datos de los parámetros predeterminados

      Se puede usar cualquier valor primitivo u objeto como valor de un parámetro predeterminado. En esta sección, verá que esta flexibilidad aumenta las formas en que se pueden utilizar los parámetros predeterminados.

      Primero, establezca los parámetros usando un número, una cadena, un booleano, un objeto, una matriz y un valor nulo como predeterminado. En este ejemplo, se usa la sintaxis arrow function:

      // Create functions with a default value for each data type
      const defaultNumber = (number = 42) => console.log(number)
      const defaultString = (string = 'Shark') => console.log(string)
      const defaultBoolean = (boolean = true) => console.log(boolean)
      const defaultObject = (object = { id: 7 }) => console.log(object)
      const defaultArray = (array = [1, 2, 3]) => console.log(array)
      const defaultNull = (nullValue = null) => console.log(nullValue)
      

      Al invocar estas funciones sin parámetros, todas usarán los valores predeterminados:

      // Invoke each function
      defaultNumber()
      defaultString()
      defaultBoolean()
      defaultObject()
      defaultArray()
      defaultNull()
      

      Output

      42 "Shark" true {id: 7} (3) [1, 2, 3] null

      Tenga en cuenta que los objetos que se creen con un parámetro predeterminado se crearán cada vez que se invoque la función. Un uso común de los parámetros predeterminados es aprovechar este comportamiento para obtener valores de los objetos. Si intenta acceder a un valor o desestructurarlo desde un objeto que no existe, obtendrá un error. Sin embargo, si el parámetro predeterminado es un objeto vacío, simplemente, se darán valores undefined en vez de devolver un error:

      // Define a settings function with a default object
      function settings(options = {}) {
        const { theme, debug } = options
      
        // Do something with settings
      }
      

      Esto evitará el error que genera la desestructuración de objetos que no existen.

      Ahora que aprendió cómo funcionan los parámetros predeterminados con distintos tipos de datos, en la siguiente sección, se explicará el funcionamiento conjunto de varios parámetros predeterminados.

      Uso de varios parámetros predeterminados

      Puede usar tantos parámetros predeterminados como desee en una función. En esta sección, aprenderá a hacerlo y a usarlos para manipular el DOM con un ejemplo práctico.

      Primero, declare una función sum() con varios parámetros predeterminados:

      // Define a function to add two values
      function sum(a = 1, b = 2) {
        return a + b
      }
      
      sum()
      

      Esto dará como resultado el siguiente cálculo predeterminado:

      Output

      3

      Además, el valor que se use en un parámetro se puede utilizar en cualquier parámetro predeterminado subsiguiente, de izquierda a derecha. Por ejemplo, la función createUser crea un objeto de usuario userObj como tercer parámetro y lo único que hace la función en sí misma es mostrar userObj con los primeros dos parámetros:

      // Define a function to create a user object using parameters
      function createUser(name, rank, userObj = { name, rank }) {
        return userObj
      }
      
      // Create user
      const user = createUser('Jean-Luc Picard', 'Captain')
      

      Si invoca la función user aquí, obtendrá el siguiente resultado:

      Output

      {name: "Jean-Luc Picard", rank: "Captain"}

      Se recomienda dejar todos los parámetros predeterminados al final de la lista de parámetros para poder omitir valores opcionales con facilidad. Si, primero, usa un parámetro predeterminado, deberá pasar explícitamente undefined para usar el valor por defecto.

      El ejemplo a continuación muestra el parámetro predeterminado al comienzo de la lista:

      // Define a function with a default parameter at the start of the list
      function defaultFirst(a = 1, b) {
        return a + b
      }
      

      Al invocar esta función, debería invocar defaultFirst() con dos argumentos:

      defaultFirst(undefined, 2)
      

      El resultado sería el siguiente:

      Output

      3

      En este ejemplo se muestra el parámetro predeterminado al final de la lista:

      // Define a function with a default parameter at the end of the list
      function defaultLast(a, b = 1) {
        return a + b
      }
      
      defaultLast(2)
      

      El resultado sería el mismo:

      Output

      3

      Las dos funciones tienen el mismo resultado, pero la que tiene el valor predeterminado al final de la lista permite invocar la función de forma mucho más ordenada.

      En este ejemplo práctico, la función creará un elemento DOM y agregará una etiqueta de texto y clases, si existen.

      // Define function to create an element
      function createNewElement(tag, text, classNames = []) {
        const el = document.createElement(tag)
        el.textContent = text
      
        classNames.forEach(className => {
          el.classList.add(className)
        })
      
        return el
      }
      

      Puede invocar la función con algunas clases en una matriz:

      const greeting = createNewElement('p', 'Hello!', ['greeting', 'active'])
      

      Al invocar greeting, se obtendrá el siguiente valor:

      Output

      <p class="greeting active">Hello!</p>

      Sin embargo, si no incluye la matriz classNames en la llamada de función, de todos modos, funcionará.

      const greeting2 = createNewElement('p', 'Hello!')
      

      Ahora, greeting2 tiene el siguiente valor:

      Output

      <p>Hello!</p>

      En este ejemplo, forEach() se puede usar en una matriz vacía sin ningún problema. Si la matriz vacía no se hubiera establecido en el parámetro predeterminado, obtendría el siguiente error:

      Output

      VM2673:5 Uncaught TypeError: Cannot read property 'forEach' of undefined at createNewElement (<anonymous>:5:14) at <anonymous>:12:18

      Ahora que aprendió cómo pueden interactuar varios parámetros predeterminados, puede avanzar a la siguiente sección para ver cómo funcionan las llamadas de función como parámetros predeterminados.

      Llamadas de función como parámetros predeterminados

      Además de los tipos primitivos y los objetos, el resultado de una llamada de función se puede usar como parámetro predeterminado.

      En el siguiente bloque de código, creará una función que mostrará un número al azar y, luego, usará el resultado como valor del parámetro predeterminado en una función cube:

      // Define a function to return a random number from 1 to 10
      function getRandomNumber() {
        return Math.floor(Math.random() * 10)
      }
      
      // Use the random number function as a default parameter for the cube function
      function cube(x = getRandomNumber()) {
        return x * x * x
      }
      

      Al invocar la función cube sin un parámetro, es posible que se obtengan resultados diferentes cada vez que se invoque.

      // Invoke cube function twice for two potentially different results
      cube()
      cube()
      

      El resultado de estas llamadas de función variará:

      Output

      512 64

      Incluso puede usar métodos incorporados, como los que del objeto Math, y utilizar el valor devuelto en una llamada de función como parámetro en otra función.

      En el siguiente ejemplo, se asigna un número al azar a x, que se usa como parámetro en la función cube que creó. Luego, el parámetro y calculará la raíz cúbica del número y corroborará si x e y son equivalentes:

      // Assign a random number to x
      // Assign the cube root of the result of the cube function and x to y
      function doesXEqualY(x = getRandomNumber(), y = Math.cbrt(cube(x))) {
        return x === y
      }
      
      doesXEqualY()
      

      Esto dará el siguiente resultado:

      Output

      true

      Como se puede observar en el siguiente ejemplo, un parámetro predeterminado puede ser, incluso, una definición de función, que define un parámetro como función inner y devuelve la llamada de función de parameter:

      // Define a function with a default parameter that is an anonymous function
      function outer(
        parameter = function inner() {
          return 100
        }
      ) {
        return parameter()
      }
      
      // Invoke outer function
      outer()
      

      Output

      100

      La función inner se creará de cero cada vez que se invoque la función outer.

      Conclusión

      En este artículo, conoció los parámetros de función predeterminados y aprendió a usarlos. Ahora, puede usar parámetros predeterminados como ayuda para mantener sus funciones ordenadas y fáciles de leer. También sabe asignar matrices y objetos vacíos a parámetros de antemano para reducir la complejidad y la cantidad de líneas de código en tareas como la recuperación de valores de un objeto o la repetición de una matriz.

      Si desea obtener más información sobre JavaScript, consulte la página de inicio de nuestra serie Cómo producir código en JavaScript o busque nuestra serie Cómo producir código en Node.js para hallar artículos sobre el desarrollo de backend.



      Source link