Reputation: 1767
I can't believe this question would not have been asked before, but I searched as much as I could and couldn't find it so here it goes.
I want to test if a dynamically built JavaScript object exists. However when I test this:
var myObject = {};
var dynamicName = "customName";
if(myObject[dynamicName].object == undefined){
myObject[dynamicName].object = "something"; // Make an entry in the dynamic object
alert("The object didn't exist, so we populated it");
}else{
alert("The object already exist");
}
If the object doesn't exist and I try to run the above code I get an error saying "myObject[dynamicName] is undefined" and all javascript execution halts.
Is there a way to check if this object exists I want without causing such an error?
Upvotes: 3
Views: 9564
Reputation: 5061
There is a shorter version, (almost) without clumsy if
's
const myObject = {};
const dynamicName = 'customName';
const { [dynamicName]: obj = {} } = myObject;
if (obj.object == null) {
obj.object = 'something'
console.log('populated');
} else {
console.log('existed');
}
myObject[dynamicName] = obj;
console.log(myObject)
Upvotes: 1
Reputation:
Check typeof == object
var userObject={
"name":"abc",
"kyc":true
};
var dynamicName="name";
if (typeof userObject == 'object' && userObject[dynamicName] != undefined) {
console.log("UserObject Exists and valid");
}else{
console.log("UserObject does not Exists");
}
Upvotes: 0
Reputation: 780974
If myObject[dynamicName]
doesn't exist, you can't access its properties. Trying to access or assign a property of undefined
causes an error.
You need to create the object, then you can create the property
if (myObject && myObject[dynamicName] && myObject[dynamicName].object !== undefined) {
alert("The object already exists");
} else {
myObject = myObject || {};
myObject[dynamicName] = myObject[dynamicName] || {};
myObject[dynamicName].object = something;
alert("The object didn't exist, so we populated it");
}
Upvotes: 2