¿Cómo puedo determinar si un objeto x
tiene una propiedad definida y
, independientemente del valor de x.y
?
Actualmente estoy usando
if (typeof(x.y) !== 'undefined')
pero eso parece un poco torpe. ¿Hay una mejor manera?
javascript
object
Royhowie
fuente
fuente
Object.prototype.hasOwnProperty.call(x, 'y')
, para que la propiedad llamada "hasOwnProperty" no entre en conflicto con el proceso de inspección;){}.hasOwnProperty.call(x, 'y')
.Si desea saber si el objeto contiene físicamente la propiedad, la respuesta de @ gnarf usando
hasOwnProperty
hará el trabajo.Si desea saber si la propiedad existe en algún lugar, ya sea en el objeto mismo o en la cadena de prototipos, puede usar el
in
operador .P.ej.:
fuente
Underscore.js o Lodash
:)
fuente
Object.prototype.hasOwnProperty.call(x, "y")
. Para las matrices Creo que es posible que deseeArray.prototype.indexOf
,_.indexOf
o_.contains
Puedes recortar eso un poco así:
fuente
x = {y:undefined}
Una característica de mi código original
lo que puede ser útil en algunas situaciones es que es seguro usar si
x
exista o no. Con cualquiera de los métodos en la respuesta de gnarf, primero se debe verificarx
si hay alguna duda de si existe.Entonces, quizás los tres métodos tienen un lugar en la bolsa de trucos.
fuente
(x && x.hasOwnProperty('y'))
o(x && 'y' in x)
ReferenceError
cadena en lugar de la cadena 'undefined'Dado que la pregunta se refería a la complejidad de la comprobación de propiedades, y un caso de uso regular para eso es la validación de los objetos de opciones de argumentos de función, pensé que mencionaría una forma corta y libre de biblioteca de probar la existencia de múltiples propiedades. Descargo de responsabilidad: requiere ECMAScript 5 (pero IMO cualquiera que todavía use IE8 merece una web rota).
fuente
Por qué no simplemente:
O si espera un tipo específico:
fuente
x.hasOwnProperty('y')
?