¿Cómo verifico si existe una clave particular en un objeto o matriz de JavaScript?
Si no existe una clave e intento acceder a ella, ¿devolverá false? O arrojar un error?
javascript
arrays
object
Adam Ernst
fuente
fuente
property.key = property.key || 'some default value'
, en caso de que quiera que esa clave exista con algún valorRespuestas:
Comprobar la indefinición no es una forma precisa de comprobar si existe una clave. ¿Qué pasa si la clave existe pero el valor es realmente
undefined
?En su lugar, debe usar el
in
operador:Si desea verificar si una clave no existe, recuerde usar paréntesis:
O, si desea probar particularmente las propiedades de la instancia del objeto (y no las propiedades heredadas), use
hasOwnProperty
:Para la comparación del rendimiento entre los métodos que son
in
,hasOwnProperty
y la clave esundefined
, vea este punto de referenciafuente
respuesta rápida
Acceder directamente a una propiedad que falta utilizando el estilo de matriz (asociativo) o el estilo de objeto devolverá una constante indefinida .
El operador lento y confiable en el método hasOwnProperty
Como la gente ya ha mencionado aquí, podría tener un objeto con una propiedad asociada con una constante "indefinida".
En ese caso, tendrá que usar hasOwnProperty o en operator para saber si la clave está realmente allí. Pero, pero a qué precio?
así que te digo ...
en operator y hasOwnProperty son "métodos" que utilizan el mecanismo Descriptor de propiedades en Javascript (similar a la reflexión de Java en el lenguaje Java).
http://www.ecma-international.org/ecma-262/5.1/#sec-8.10
Por otro lado, llamar a un método o clave de objeto utilizará el mecanismo Javascript [[Get]]. ¡Eso es mucho más rápido!
punto de referencia
http://jsperf.com/checking-if-a-key-exists-in-a-javascript-array
.
Utilizando en operadorEl resultado fue
Usando hasOwnPropertyEl resultado fue
Acceso a elementos directamente (estilo de paréntesis)El resultado fue
Acceso a elementos directamente (estilo de objeto)El resultado fue
EDITAR: ¿Cuál es la razón para asignar a una propiedad el
undefined
valor?Esa pregunta me desconcierta. En Javascript, hay al menos dos referencias de objetos ausentes para evitar problemas como este:
null
yundefined
.null
es el valor primitivo que representa la ausencia intencional de cualquier valor de objeto, o en términos cortos, la falta de valor confirmada . Por otro lado,undefined
es un valor desconocido (no definido). Si hay una propiedad que se usará más tarde con un valor apropiado , considere usar lanull
referencia de uso en lugar deundefined
porque en el momento inicial se confirma que la propiedad carece de valor.Comparar:
Asesorar
Evitar objetos con
undefined
valores. Marque directamente siempre que sea posible y úselonull
para inicializar valores de propiedad. De lo contrario, utilice elin
operador ohasOwnProperty()
método lento .EDITAR: 04/12/2018 - NO PERTINENTE MÁS
Como la gente ha comentado, las versiones modernas de los motores Javascript (con la excepción de Firefox) han cambiado el enfoque de las propiedades de acceso. La implementación actual es más lenta que la anterior para este caso particular, pero la diferencia entre la clave de acceso y el objeto es despreciable.
fuente
delete hash[key]
es mucho más lenta quehash[key] = undefined
. Por supuesto, en este caso no tiene sentido que necesite elin
operador, pero actúa como un contraejemplo de "siempre debemos evitar establecer el valor en indefinido".Se volverá
undefined
.undefined
Es un valor constante especial. Entonces puedes decir, por ejemploEsta es probablemente la mejor manera de verificar si faltan claves. Sin embargo, como se señala en un comentario a continuación, es teóricamente posible que desee tener el valor real
undefined
. Nunca he necesitado hacer esto y no puedo pensar en una razón por la cual quisiera hacerlo, pero solo para completar, puede usar elin
operadorfuente
var undefined = 42;
. Al probar accesorios indefinidos, siempre debes usarlos((typeof variable) === "undefined")
.undefined
no es una propiedad de escritura según la especificación ecma-international.org/ecma-262/5.1/#sec-15.1.1.3La respuesta aceptada se refiere al objeto . Tenga cuidado al usar el
in
operador en Array para buscar datos en lugar de claves:Para probar elementos existentes en una matriz: ¿La mejor manera de encontrar si un elemento está en una matriz de JavaScript?
fuente
Es probable que solo pruebe valores de atributos de objeto que sean muy diferentes de las claves de matriz
fuente
Tres formas de verificar si una propiedad está presente en un objeto javascript:
!!obj.theProperty
Convertirá valor a bool. devuelve
true
para todos menos elfalse
valortheProperty
' en obj Devuelveverdadero si la propiedad existe, sin importar su valor (incluso vacío)
obj.hasOwnProperty('theProperty')
No comprueba la cadena del prototipo. (dado que todos los objetos tienen el
toString
método, 1 y 2 devolverán verdadero en él, mientras que 3 puede devolver falso en él).Referencia:
fuente
var a = {a : undefined, b : null}; !!a.a **will return false**
!!obj.theProperty
no es una solución para verificar si un objeto tiene una propiedad llamadatheProperty
. Falla para cualquier valor de propiedad falsey,,undefined
nulo, numérico0
oNaN
, y la cadena vacía""
Si está utilizando la biblioteca underscore.js, las operaciones de objeto / matriz se vuelven simples.
En su caso, se puede utilizar el método _.has. Ejemplo:
devuelve verdadero
Pero,
devuelve falso
fuente
Responder:
Explicación:
El
in
operador verificará si la clave existe en el objeto. Si verificó si el valor no estaba definido:if (myObj["key"] === 'undefined')
podría tener problemas porque posiblemente podría existir una clave en su objeto con elundefined
valor.Por esa razón, es una práctica mucho mejor usar primero el
in
operador y luego comparar el valor que está dentro de la clave una vez que ya sabe que existe.fuente
Aquí hay una función auxiliar que encuentro bastante útil
¡Esto
keyExists(key, search)
se puede usar para buscar fácilmente una clave dentro de objetos o matrices!Simplemente páselo la clave que desea encontrar y busque obj (el objeto o matriz) en el que desea encontrarlo.
Ha sido bastante confiable y funciona bien entre navegadores.
fuente
Array.indexOf
método incorporado ? (si buscas un valor, eso es)vanila js
Si desea verificar si el objeto tiene al menos una propiedad en es2015
fuente
Solución ES6
usando
Array#some
yObject.keys
. Devolverá verdadero si la clave dada existe en el objeto o falso si no existe.Ejemplo de una línea.
fuente
Nosotros podemos usar -
hasOwnProperty.call(obj, key);
La forma de subrayar.js :
fuente
La forma más fácil de verificar es
por ejemplo:
El valor de retorno como verdadero implica que la clave existe en el objeto.
fuente
Para aquellos que han
lodash
incluido en su proyecto:hay un método lodash _.get que intenta obtener claves "profundas":
Esto verificará efectivamente si esa clave, por profunda que sea , esté definida y no arrojará un error que podría dañar el flujo de su programa si esa clave no está definida.
fuente
Si bien esto no necesariamente verifica si existe una clave, sí verifica la veracidad de un valor. Que
undefined
ynull
caer debajo.Boolean(obj.foo)
Esta solución funciona mejor para mí porque uso el mecanografiado y el uso de cadenas como esta
'foo' in obj
oobj.hasOwnProperty('foo')
para verificar si existe una clave o no no me proporciona inteligencia.fuente
Si desea verificar cualquier clave a cualquier profundidad en un objeto y tener en cuenta los valores de falsey, considere esta línea para una función de utilidad:
Resultados
Consulte también este paquete NPM: https://www.npmjs.com/package/has-deep-value
fuente
fuente
En el mundo 'array' podemos ver los índices como algún tipo de claves. Lo sorprendente del
in
operador (que es una buena opción para el objeto) también funciona con matrices. El valor devuelto para la clave no existente esundefined
fuente
yourArray.indexOf (yourArrayKeyName)> -1
cierto
falso
fuente
Este ejemplo puede demostrar las diferencias entre formas diferentes. Espero que te ayude a elegir el más adecuado para tus necesidades:
fuente
Nueva solución increíble con JavaScript Destructuring :
Marque otro uso de JavaScript Destructuring
fuente