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

2020/09/22 00:01 · javascript ·  · 0评论

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

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是正确的,但事实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
}

对于自己的财产:

var loan = { amount: 150 };
if(Object.prototype.hasOwnProperty.call(loan, "amount")) 
{ 
   //will execute
}

注意:如果在原型链中定义了自定义hasOwnProperty(在这里不是这种情况),则使用Object.prototype.hasOwnProperty优于loan.hasOwnProperty(..)

var foo = {
      hasOwnProperty: function() {
        return false;
      },
      bar: 'Here be dragons'
    };

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

要在发现中包括继承的属性,请使用in运算符:(但您必须将一个对象放在'in'的右侧,原始值将引发错误,例如 'home'中的'length'将引发错误,而'length'在新的String('home')中不会)

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/zh-CN/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
}

检查对象属性是否存在的一种更安全的方法是使用空对象或对象原型进行调用 hasOwnProperty()

var foo = {
  hasOwnProperty: function() {
    return false;
  },
  bar: 'Here be dragons'
};

foo.hasOwnProperty('bar'); // always returns false

// Use another Object's hasOwnProperty and call it with 'this' set to foo
({}).hasOwnProperty.call(foo, 'bar'); // true

// It's also possible to use the hasOwnProperty property from the Object
// prototype for this purpose
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true

来自MDN Web文档的引用-Object.prototype.hasOwnProperty()

您可以使用hasOwnProperty()以及in运算符。

本文地址:http://javascript.askforanswer.com/ruheshiyongbaocunshuxingmingchengdebianliangjianchaduixiangshuxingshifoucunzai.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!