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.fooexiste pero es falseo 0(y probablemente también otros valores).
¿Cuál es el equivalente perfecto de PHP isseten 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
typeofoperador:Volverá
"undefined"si la propiedad no existe o si su valor esundefined.(Ver también: Diferencia entre
undefinedy no se define ) .Hay otras formas de averiguar si existe una propiedad en un objeto, como el
hasOwnPropertymétodo:Y el
inoperador:La diferencia entre los dos últimos es que el
hasOwnPropertymétodo verificará si la propiedad existe físicamente en el objeto (la propiedad no se hereda).El
inoperador verificará todas las propiedades accesibles en la cadena del prototipo, por ejemplo:Como puede ver,
hasOwnPropertyregresafalsey elinoperador regresatruecuando verifica eltoStringmétodo, este método se define en la cadena del prototipo, porqueobjhereda la formaObject.prototype.fuente
typeoflugar deif( obj.foo !== undefined )?isset($abc->def->ghi->jkl)sin generar una excepción y detener el script, a diferencia deltypeofoperador 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
trueofalse:JS
En JavaScript, no tenemos esa libertad, siempre obtendremos un error si hacemos lo mismo porque JS está intentando acceder inmediatamente al valor de
deeperantes 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.defno 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
variableno 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
yse transfiere ningún valor a functiontest, nuestraissetfunción funciona perfectamente en este contexto, porqueyse conoce en la funcióntestcomo unundefinedvalor.fuente
!==ya es un booleano.Es demasiado largo para escribir cuando se usa. Pero no podemos empaquetar la
typeofpalabra 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)convarunset:ReferenceError: var is not definedfuente
isset(someVar), dondesomeVarnunca 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
hasOwnPropertyen 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
$vares la variable a verificar. Sin embargo, puede tener cualquier número de parámetros.isset () devuelve
TRUEsi var existe y tiene un valor diferente aNULL.FALSEde 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
NULLPor 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