我正在检查是否存在一个对象属性,该属性包含一个变量,该变量包含有问题的属性名称。
var myObj;
myObj.prop = "exists";
var myProp = "p"+"r"+"o"+"p";
if(myObj.myProp){
alert("yes, i have that property");
};
这是未定义的,因为它正在查找myObj.myrop,但我希望它检查myObj.rop
我正在检查是否存在一个对象属性,该属性包含一个变量,该变量包含有问题的属性名称。
var myObj;
myObj.prop = "exists";
var myProp = "p"+"r"+"o"+"p";
if(myObj.myProp){
alert("yes, i have that property");
};
这是未定义的,因为它正在查找myObj.myrop,但我希望它检查myObj.rop
当前回答
为我工作。
if (typeof receviedData?.d?.heartbeat_interval != "undefined") {
}
其他回答
您可以使用hasOwnProperty,但根据引用,使用此方法时需要引号:
if (myObj.hasOwnProperty('myProp')) {
// do something
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
另一种方法是使用in运算符,但这里也需要引号:
if ('myProp' in myObj) {
// do something
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
您可以使用hasOwnProperty()和in运算符。
对于自有财产:
var loan = { amount: 150 };
if(Object.prototype.hasOwnProperty.call(loan, "amount"))
{
//will execute
}
注意:如果在原型链中定义了自定义hasOwnProperty(这里不是这样),则使用Object.prototype.hasOwnProperty优于loan.hasOwn Property(..),例如
var foo = {
hasOwnProperty: function() {
return false;
},
bar: 'Here be dragons'
};
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
要在查找中包含继承的财产,请使用in运算符:(但必须将对象放置在“in”的右侧,基元值将引发错误,例如,“home”中的“length”将引发错误;但新String(“home“)中的“longth”不会)
const yoshi = { skulk: true };
const hattori = { sneak: true };
const kuma = { creep: true };
if ("skulk" in yoshi)
console.log("Yoshi can skulk");
if (!("sneak" in yoshi))
console.log("Yoshi cannot sneak");
if (!("creep" in yoshi))
console.log("Yoshi cannot creep");
Object.setPrototypeOf(yoshi, hattori);
if ("sneak" in yoshi)
console.log("Yoshi can now sneak");
if (!("creep" in hattori))
console.log("Hattori cannot creep");
Object.setPrototypeOf(hattori, kuma);
if ("creep" in hattori)
console.log("Hattori can now creep");
if ("creep" in yoshi)
console.log("Yoshi can also creep");
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
注意:人们可能会尝试使用typeof和[]属性访问器作为以下代码,但这些代码并不总是有效的。。。
var loan = { amount: 150 };
loan.installment = undefined;
if("installment" in loan) // correct
{
// will execute
}
if(typeof loan["installment"] !== "undefined") // incorrect
{
// will not execute
}
感谢大家的帮助,并推动消除eval声明。变量需要放在括号中,而不是点符号。这是一个干净、正确的代码。
其中每个都是变量:appChoice、underI、underObst。
if(typeof tData.tonicdata[appChoice][underI][underObstr] !== "undefined"){
//enter code here
}
在答案中,我没有看到!!真实性检查。
if (!!myObj.myProp) //Do something