Tengo la siguiente respuesta JSON de una solicitud ajax.Compruebe si se define un objeto, mejor práctica.
var json = {
"response": {
"freeOfChargeProduct": {
"description": "Product",
"orderQty": 5,
"productName": "XYZ",
"qty": 6,
"details": {
"price": 55.5,
"instock": "true",
"focQuantity": 1
}
},
"orderLineId": 4788,
"totalOrderLinePrice": "741.36",
"totalOrderPrice": "1,314.92",
"totalQty": 17
};
La dosis no JSON siempre devuelven una propiedad "freeOfChargeProduct". Así que si quiero obtener el precio "freeOfChargeProduct", entonces tengo que hacer lo siguiente:
var getFreeOfChargeProductPrice = function() {
var r = json.response;
if (r && r.freeOfChargeProduct && r.freeOfChargeProduct.details) {
return r.freeOfChargeProduct.details.price;
}
return null;
};
No hay problemas. Pero es muy molesto verificar cada propiedad en el objeto, así que creé una función que verifica si una propiedad en un objeto está definida.
var getValue = function (str, context) {
var scope = context || window,
properties = str.split('.'), i;
for(i = 0; i < properties.length; i++) {
if (!scope[properties[i]]) {
return null;
}
scope = scope[properties[i]];
}
return scope;
};
var price = getValue('json.response.freeOfChargeProduct.details.price');
// Price is null if no such object exists.
Ahora a mi pregunta: ¿Es esta una manera buena o mala para comprobar si existe una propiedad de un objeto? ¿Alguna mejor sugerencia/método?
EDIT:
no wa no utilizar el & & -operator. Soy flojo y estoy buscando un método reutilizable para verificar si un objeto (o propiedad de un objeto) está definido.
:) ¡Gracias!
Hace un tiempo tuve [una pregunta similar] (http://stackoverflow.com/questions/2631001/javascript-test-for-existence-of-nested-object-key). Es posible que le interesen algunas de las respuestas. – user113716
¡Gracias por tu respuesta! Encontré una respuesta (publicada por Kennebec) y le di +1 :) – nekman