最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Test if an object exists JavaScript - Stack Overflow

programmeradmin2浏览0评论

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?

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?

Share Improve this question edited Jul 26, 2018 at 4:31 Govind Samrow 10.2k14 gold badges59 silver badges90 bronze badges asked Jul 26, 2018 at 2:29 YAHsavesYAHsaves 1,7671 gold badge16 silver badges39 bronze badges 7
  • Possible duplicate of Check if object exists in JavaScript – Joseph Cho Commented Jul 26, 2018 at 2:31
  • Because that alert saying it's not defined is in the same if that's defining it. So the order of the if is: 1. test and find not defined, 2. define it, 3.alert (not defined) – Mark Commented Jul 26, 2018 at 2:31
  • @MarkMeyer How would that explain the error? I understand the alerts aren't perfect but that's just psudeo code. I really want to get rid of the error – YAHsaves Commented Jul 26, 2018 at 2:32
  • I don't get an error when I run your code (other than the syntax errors), but I did make a myObject object and populate dynamicName with a string. It would help if you made a runnable snippet with the (<>) button that showed the error. – Mark Commented Jul 26, 2018 at 2:33
  • @MarkMeyer Sorry I posted this question too quick without testing it myself, I edited the code to reflect more my true circumstances and this does cause the error – YAHsaves Commented Jul 26, 2018 at 2:36
 |  Show 2 more ments

3 Answers 3

Reset to default 2

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");
}

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)

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");
}

发布评论

评论列表(0)

  1. 暂无评论