Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

286
Views
variable === indefinido vs tipo de variable === "indefinido"

Las pautas de estilo de jQuery Core sugieren dos formas diferentes de verificar si una variable está definida.

  • Variables globales: tipo de typeof variable === "undefined"
  • Variables locales: variable === undefined
  • Propiedades: object.prop === undefined

¿Por qué jQuery usa un enfoque para variables globales y otro para locales y propiedades?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Para las variables no declaradas, typeof foo devolverá el literal de cadena "undefined" , mientras que la verificación de identidad foo === undefined desencadenaría el error "foo no está definido" .

Para las variables locales (que sabe que están declaradas en alguna parte), no ocurriría tal error, de ahí la verificación de identidad.

over 4 years ago · Santiago Trujillo Report

0

Me limitaría a usar typeof foo === "undefined" en todas partes. Eso nunca puede salir mal.

Me imagino que la razón por la que jQuery recomienda los dos métodos diferentes es que definen su propia variable undefined dentro de la función en la que vive el código jQuery, por lo que dentro de esa función undefined está a salvo de manipulaciones externas. También me imagino que alguien en algún lugar ha evaluado los dos enfoques diferentes y descubrió que foo === undefined es más rápido y, por lo tanto, decidió que es el camino a seguir. [ACTUALIZACIÓN: como se señaló en los comentarios, la comparación con undefined también es un poco más corta, lo que podría ser una consideración.] Sin embargo, la ganancia en situaciones prácticas será completamente insignificante: esta verificación nunca será ningún tipo de cuello de botella, y lo que pierde es significativo: evaluar una propiedad de un objeto host para comparar puede arrojar un error, mientras que un typeof de verificación nunca lo hará.

Por ejemplo, lo siguiente se usa en IE para analizar XML:

 var x = new ActiveXObject("Microsoft.XMLDOM");

Para verificar si tiene un método loadXML de forma segura:

 typeof x.loadXML === "undefined"; // Returns false

Por otro lado:

 x.loadXML === undefined; // Throws an error

ACTUALIZAR

Otra ventaja de la verificación typeof que olvidé mencionar es que también funciona con variables no declaradas, lo que no ocurre con la verificación foo === undefined y, de hecho, arroja un ReferenceError . Gracias a @LinusKleen por recordármelo. Por ejemplo:

 typeof someUndeclaredVariable; // "undefined" someUndeclaredVariable === undefined; // throws a ReferenceError

En pocas palabras: utilice siempre el typeof de cheque.

over 4 years ago · Santiago Trujillo Report

0

Otra razón más para usar typeof-variant: undefined se puede redefinir.

 undefined = "foo"; var variable = "foo"; if (variable === undefined) console.log("eh, what?!");

El resultado de typeof variable no puede.

Actualización : tenga en cuenta que este no es el caso en ES5, donde el undefined global es una propiedad no configurable y no escribible:

15.1.1 Propiedades de valor del objeto global
[...]
15.1.1.3 indefinido
El valor de undefined es indefinido (ver 8.1). Esta propiedad tiene los atributos
{ [[Escribible]]: falso, [[Enumerable]]: falso, [[Configurable]]: falso }.

Pero aún puede ser sombreado por una variable local:

 (function() { var undefined = "foo"; var variable = "foo"; if (variable === undefined) console.log("eh, what?!"); })()

o parámetro:

 (function(undefined) { var variable = "foo"; if (variable === undefined) console.log("eh, what?!"); })("foo")
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!