¿Cómo puedo determinar si un objeto xtiene 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
hasOwnPropertyhará 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
inoperador .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,_.indexOfo_.containsPuedes 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
xexista o no. Con cualquiera de los métodos en la respuesta de gnarf, primero se debe verificarxsi 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)ReferenceErrorcadena 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')?