[javascript] 속성 이름을 가진 변수에 객체 속성이 있는지 확인하는 방법은 무엇입니까?

속성 이름이있는 변수가있는 객체 속성이 있는지 확인하고 있습니다.

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/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

다른 방법은 연산자 를 사용 하는 것이지만 여기에도 따옴표 가 필요 합니다 .

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

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in


답변

모든 사람의 도움과 평가 진술을 없애기 위해 노력해 주셔서 감사합니다. 변수는 점 표기법이 아닌 괄호 안에 있어야합니다. 이것은 작동하고 깨끗하고 적절한 코드입니다.

각각의 변수는 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/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

결과에 상속 된 속성을 포함하려면 in 연산자를 사용하십시오 (그러나 ‘in’의 오른쪽에 객체를 배치해야합니다. 기본 값은 오류를 발생시킵니다. 예를 들어 ‘home’의 ‘length’는 오류를 throw하지만 ‘length’ 새로운 문자열 ( ‘홈’) 에서는 그렇지 않습니다)

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
}


답변

객체에 속성이 존재하는지 확인하는 훨씬 안전한 방법은 빈 객체 또는 객체 프로토 타입을 사용하여 호출하는 것입니다 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 웹 문서 에서 참조 -Object.prototype.hasOwnProperty ()


답변

연산자 hasOwnProperty()뿐만 아니라 사용할 수 있습니다 in.


답변