协慌网

登录 贡献 社区

如何使用保存属性名称的变量检查对象属性是否存在?

我正在检查对象属性是否存在,该变量具有持有所讨论属性名称的变量。

var myObj;
myObj.prop = "exists";
var myProp = "p"+"r"+"o"+"p";

if(myObj.myProp){
    alert("yes, i have that property");
};

这是undefined因为它正在寻找myObj.myProp但我希望它检查myObj.prop

答案

var myProp = 'prop';
if(myObj.hasOwnProperty(myProp)){
    alert("yes, i have that property");
}

或者

var myProp = 'prop';
if(myProp in myObj){
    alert("yes, i have that property");
}

或者

if('prop' in myObj){
    alert("yes, i have that property");
}

请注意, hasOwnProperty不会检查继承的属性,而in会检查继承的属性。例如'constructor' in myObj为 true,但myObj.hasOwnProperty('constructor')不是。

您可以使用hasOwnProperty ,但是基于引用,使用此方法时需要引号:

if (myObj.hasOwnProperty('myProp')) {
    // do something
}

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

另一种方法是运算符中使用,但您也需要在这里加上引号:

if ('myProp' in myObj) {
    // do something
}

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/in

感谢大家的帮助,并努力摆脱 eval 声明。变量必须放在方括号中,而不是点号。这可以正常工作,并且是正确的代码。

这些都是变量:appChoice,underI,underObstr。

if(typeof tData.tonicdata[appChoice][underI][underObstr] !== "undefined"){
    //enter code here
}