Una alternativa a la plétora de typeof
respuestas;
Global variables declaradas con un var varname = value;
declaración en el ámbito global
se puede acceder como propiedades del objeto de ventana.
Como tal, el hasOwnProperty()
método, que
devuelve un valor booleano que indica si el objeto tiene la propiedad especificada como su propia propiedad (en lugar de heredarla)
se puede utilizar para determinar si
a var
de «varname» ha sido declarado globalmente es decir es una propiedad del window
.
// Globally established, therefore, properties of window
var foo = "whatever", // string
bar = false, // bool
baz; // undefined
// window.qux does not exist
console.log( [
window.hasOwnProperty( "foo" ), // true
window.hasOwnProperty( "bar" ), // true
window.hasOwnProperty( "baz" ), // true
window.hasOwnProperty( "qux" ) // false
] );
Lo bueno de hasOwnProperty()
es que al llamarlo, no usamos una variable que aún no esté declarada, lo cual, por supuesto, es la mitad del problema en primer lugar.
Aunque no siempre los Perfecto o ideal solución, en determinadas circunstancias, ¡es solo el trabajo!
Lo anterior es cierto cuando se usa var
para definir una variable, Opuesto a let
cuales:
declara una variable local de alcance de bloque, inicializándola opcionalmente a un valor.
es diferente al
var
palabra clave, que define una variable globalmente o localmente a una función completa independientemente del alcance del bloque.En el nivel superior de programas y funciones,
let
, diferente avar
, no crea una propiedad en el objeto global.
Por completitud: const
las constantes, por definición, no son realmente variables (aunque su contenido puede serlo); más relevante:
Las constantes globales no se convierten en propiedades del objeto de ventana, a diferencia de
var
variables. Se requiere un inicializador para una constante; es decir, debe especificar su valor en la misma declaración en la que se declara.El valor de una constante no puede cambiar mediante la reasignación y no se puede volver a declarar.
La declaración const crea una referencia de solo lectura a un valor. No significa que el valor que tiene sea inmutable, solo que el identificador de variable no se puede reasignar.
Ya que let
variables o const
Las constantes nunca son propiedades de ningún objeto que haya heredado la hasOwnProperty()
método, no se puede utilizar para comprobar su existencia.
Respecto a la disponibilidad y uso de hasOwnProperty()
:
Cada objeto descendió de Objeto hereda el
hasOwnProperty()
método. […] a diferencia delin
operador, este método no comprueba la cadena de prototipos del objeto.