En PHP puedes hacer if(isset($array['foo'])) { ... }
. En JavaScript a menudo se usa if(array.foo) { ... }
para hacer lo mismo, pero esta no es exactamente la misma declaración. La condición también se evaluará como falsa si array.foo
existe pero es false
o 0
(y probablemente también otros valores).
¿Cuál es el equivalente perfecto de PHP isset
en JavaScript?
En un sentido más amplio, sería conveniente una guía general y completa sobre el manejo de JavaScript de variables que no existen, variables sin un valor, etc.
javascript
isset
Bart van Heukelom
fuente
fuente
_.isUndefined(arr.foo)
Respuestas:
Generalmente uso el
typeof
operador:Volverá
"undefined"
si la propiedad no existe o si su valor esundefined
.(Ver también: Diferencia entre
undefined
y no se define ) .Hay otras formas de averiguar si existe una propiedad en un objeto, como el
hasOwnProperty
método:Y el
in
operador:La diferencia entre los dos últimos es que el
hasOwnProperty
método verificará si la propiedad existe físicamente en el objeto (la propiedad no se hereda).El
in
operador verificará todas las propiedades accesibles en la cadena del prototipo, por ejemplo:Como puede ver,
hasOwnProperty
regresafalse
y elin
operador regresatrue
cuando verifica eltoString
método, este método se define en la cadena del prototipo, porqueobj
hereda la formaObject.prototype
.fuente
typeof
lugar deif( obj.foo !== undefined )
?isset($abc->def->ghi->jkl)
sin generar una excepción y detener el script, a diferencia deltypeof
operador de JavaScript . Tienes que usar algo comotry{ abc.def.ghi.jkl; isset=true } catch(e){ isset=false }
Tema antiguo, pero hay nuevas formas de ejecutar un equivalente
isset()
.ESNext (Etapa 4 de diciembre de 2019)
Dos nuevas sintaxis nos permiten simplificar enormemente el uso de la
isset()
funcionalidad:?.
)??
)Lea los documentos y tenga en cuenta la compatibilidad del navegador.
Respuesta anterior
Vea a continuación la explicación. Tenga en cuenta que uso la sintaxis StandardJS
Ejemplo de uso
Función de respuesta
Explicación
PHP
Tenga en cuenta que en PHP puede hacer referencia a cualquier variable a cualquier profundidad, incluso tratando de acceder a una matriz que no sea una matriz, ya que una matriz devolverá un simple
true
ofalse
:JS
En JavaScript, no tenemos esa libertad, siempre obtendremos un error si hacemos lo mismo porque JS está intentando acceder inmediatamente al valor de
deeper
antes de poder ajustarlo en nuestraisset()
función, así que ...Más alternativas fallidas:
Y algunas alternativas de trabajo que pueden volverse redundantes rápidamente:
Conclusión
Todas las otras respuestas, aunque la mayoría son viables ...
isset()
por ejemplo
isset(some, 'nested.deeper.value')
eval()
que funciona pero yo personalmente evitoCreo que lo cubrí mucho. Hay algunos puntos que hago en mi respuesta que no menciono porque, aunque relevantes, no son parte de la pregunta. Sin embargo, si es necesario, puedo actualizar mi respuesta con enlaces a algunos de los aspectos más técnicos según la demanda.
Pasé mucho tiempo en esto, así que espero que ayude a la gente.
¡Gracias por leer!
fuente
phpjs.org está mayormente retirado a favor de locutus Aquí está el nuevo enlace http://locutus.io/php/var/isset
fuente
isset(abc.def.ghi)
en caso de queabc.def
no esté definido. Sin embargo, al combinar esta solución con la que acepta un nombre de variable en forma de cadena, será idéntica a la versión de PHP.fuente
fuente
Esta solución simple funciona, pero no para la verificación profunda de objetos.
fuente
Siempre uso esta función genérica para evitar errores en las variables primitivas, así como en matrices y objetos.
fuente
Si está utilizando subrayado , siempre uso
fuente
Esta es una solución bastante a prueba de balas para probar si existe una variable:
Desafortunadamente, no puede simplemente encapsularlo en una función.
Puede pensar en hacer algo como esto:
Sin embargo, esto producirá un error de referencia si la variable
variable
no se ha definido, porque no puede pasar una variable no existente a una función:Por otro lado, le permite probar si los parámetros de la función no están definidos:
Aunque no
y
se transfiere ningún valor a functiontest
, nuestraisset
función funciona perfectamente en este contexto, porquey
se conoce en la funcióntest
como unundefined
valor.fuente
!==
ya es un booleano.Es demasiado largo para escribir cuando se usa. Pero no podemos empaquetar la
typeof
palabra clave en una función, porque se generará un error antes de que se llame a la función, así:Entonces descubrí una manera:
Puede funcionar tanto con variables individuales (variables que no existen en absoluto) como con propiedades de objeto (propiedades inexistentes). Y solo 7 caracteres más que PHP
isset
.fuente
Esta solución funcionó para mí.
fuente
isset(var)
convar
unset:ReferenceError: var is not defined
fuente
isset(someVar)
, dondesomeVar
nunca ha sido declarado. Sin embargo, dado que lo haceeval
, probablemente intente pasar una cadena . Mostrar uso. ¿Es su uso previstoisset('someVar')
? Si es así, esto se parece a esta respuesta anterior : ¿qué pasa con su respuesta es nueva?más pruebas:
https://gist.github.com/daylik/24acc318b6abdcdd63b46607513ae073
fuente
Para verificar si el bloque html existe o no, estoy usando este código:
fuente
Proporcione la ruta del objeto como una cadena, luego puede dividir esta cadena en una ruta y resolverla
hasOwnProperty
en cada paso mientras sobrescribe el objeto en cada iteración.Si está codificando en el entorno ES6, eche un vistazo a este Ques de stackoverflow .
fuente
Yo uso una función que puede verificar variables y objetos. muy conveniente para trabajar con jQuery
fuente
Fue realmente un problema para mí cuando estaba accediendo a una propiedad más profunda de un objeto, por lo que hice una función que devolverá el valor de la propiedad si existe, de lo contrario, devolverá falso. Puede usarlo para ahorrar tiempo,
fuente
Si desea verificar si existe un elemento, simplemente use el siguiente código:
Esta es una muestra:
fuente
fuente
El manual de PHP dice:
E interfaz algo como esto:
bool isset ( mixed $var [, mixed $... ] )
El parámetro
$var
es la variable a verificar. Sin embargo, puede tener cualquier número de parámetros.isset () devuelve
TRUE
si var existe y tiene un valor diferente aNULL
.FALSE
de otra manera.Algun ejemplo:
Como esto en mente, aparentemente, no es posible escribir el equivalente exacto de la
isset()
función php . Por ejemplo cuando llamamos así:Javascript trigger
Uncaught ReferenceError: some_var is not defined at (file_name):line_number
. Lo importante y notable de este comportamiento es que cuando se intenta pasar variables inexistentes a funciones normales, se desencadena un error.Pero en PHP
isset()
no son funciones regulares sino construcciones de lenguaje. Eso significa que son parte del lenguaje PHP en sí, no se rigen por las reglas normales de las funciones y, por lo tanto, pueden salirse con la suya al no desencadenar un error para las variables inexistentes. Esto es importante cuando se trata de averiguar si una variable existe o no. Pero en javscript, desencadena un error en primer lugar, digamos llamada a función con variables inexistentes.Mi punto es que no podemos escribirlo como una función equivalente de javscript, pero podemos hacer algo como esto
Si desea exactamente el mismo efecto, PHP también verifique que varable no sea
NULL
Por ejemplo
Por lo tanto, podemos incorporar esto en JavaScript y luego se verá así:
fuente
javascript isset
fuente
Tenga cuidado en ES6 , todas las soluciones anteriores no funcionan si desea verificar una declaración de una variable let y declararla, si no es así
ejemplo
verás un error
La solución fue cambiarlo por una var
otra solución si puede cambiar un let por un var, necesita eliminar su var
fuente
fuente