Me pongo indefinido al azar en variables así que ¿esta sobremata para comprobar si la variable está definida y tiene longitud de cadena? [privada]

Parece que sigo viendo indefiniciones apareciendo en la aplicación que tenemos donde estamos haciendo referencias foo.length

Esta sería la sintaxis correcta para comprobar si la variable es

  • no nulo
  • no indefinida
  • no vacío

Usando lodash

if(!_.isNil(foo) && foo.length)

O simplemente typescript

// option 1
if(foo && foo.length)

// option 2
if(foo)

Con el uso de lodash, vale la pena incluso usar o es un éxito de rendimiento?

Pregunta hecha hace 3 años, 4 meses, 27 días - Por codemaster89


3 Respuestas:

  • Depende exactamente del tipo de esa variable. Pero si foo es string[] | null | undefined, entonces sólo busca la verdad y está en su camino:

    if (foo) {
      // foo is `string[]` in this conditional scope
    }
    

    O podrías usar foo?.length y proporcionar un defecto:

    const size = foo?.length ?? 0 // length of array, if undefined use zero.
    

    Usar lodash para este tipo de cosas es demasiado exagerado.


    Así que dado todo eso para comprobar si el array existe y no está vacío, esto es probablemente el mejor más simple:

    if (foo && foo.length > 0)
    

    Respondida el Dec 18, 2020 a las 18:20 - por binarybard1cc8

    Votos positivos: 0 | Votos negativos: 0

  • En el código que proporcionaste, estás tratando de verificar si una variable denominada foo no es nula, no es indefinida y no es una cadena vacía para luego acceder a su propiedad length.

    Aquí hay unas observaciones y sugerencias:

    • En el uso de lodash: `!_.isNil(foo)` verifica si `foo` no es nulo ni indefinido, lo cual es correcto. Sin embargo, al agregar `&& foo.length`, aún existe la posibilidad de que `foo` sea una cadena vacía (`''`). Para asegurarse de que `foo` no sea una cadena vacía, podrías agreguar `&& foo.length > 0`.
    • En TypeScript:
    - La primera opción `if(foo && foo.length)` verifica si `foo` no es nulo y la longitud de la cadena no es `0`. Esto es válido, pero no verifica explícitamente si `foo` es indefinido.
    • La segunda opción `if(foo)` simplemente verifica si `foo` está definido, pero no verifica si es nulo, indefinido o una cadena vacía.

    En cuanto a la pregunta sobre si es preferible usar lodash para esta comprobación o no, realmente depende del contexto y de los requisitos de tu proyecto. Si ya estás utilizando lodash en tu aplicación y puedes aprovechar otras funcionalidades que ofrece, entonces puede tener sentido utilizarlo para esta verificación. Sin embargo, si el único propósito es realizar esta comprobación simple, podría optar por la opción nativa de TypeScript para evitar una dependencia adicional.

    Respondida el Dec 19, 2020 a las 18:18 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Uso de Lodash frente a Vanilla JavaScript

    Lodash es una biblioteca de JavaScript que proporciona funciones de utilidad para manipular datos, trabajar con colecciones y realizar otras tareas comunes. Si bien Lodash puede ser conveniente, también agrega tamaño y complejidad adicionales a su aplicación.

    En este caso específico, la comprobación para ver si una variable es nula, indefinida o vacía se puede realizar fácilmente utilizando JavaScript nativo. El enfoque de vainilla es más simple y directo, y no requiere el uso de una biblioteca externa. Aquí hay un ejemplo:

    js
    if (foo !== null && foo !== undefined && foo.length) {
      // La variable foo es válida
    }
    

    Mejoras de rendimiento

    El uso de Lodash puede mejorar el rendimiento en algunos casos cuando se realizan operaciones complejas y repetitivas. Sin embargo, para comprobaciones simples como la que está describiendo, el uso de JavaScript nativo proporcionará un rendimiento comparable sin la sobrecarga adicional.

    Conclusión

    En este caso particular, es preferible utilizar JavaScript nativo para comprobar si una variable es nula, indefinida o vacía. Este enfoque es más simple, directo y no tiene impacto en el rendimiento.

    Respondida el Dec 19, 2020 a las 18:29 - por Gemini

    Votos positivos: 0 | Votos negativos: 0