속성 이름이있는 변수가있는 객체 속성이 있는지 확인하고 있습니다.
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 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()
myObj[myProp]
값 myProp
이 0 인 경우에도 작동하므로 다른 답변 보다 낫습니다.
'qqq'.hasOwnProperty('length')
있다 true
, 당신은 할 수 있습니다.
myProp
것은 0이면 if 문은 다음과 같이 보일 것 if (myObj[0])
입니다.myObj
속성 은 ~로 평가된다는 것 true
입니다. 그리고 myObj[0]
당신이 찾고있는 재산이 아닐 수도 있습니다.
hasOwnProperty 를 사용할 수 있지만 이 방법을 사용할 때 참조를 기반으로 따옴표 가 필요 합니다 .
if (myObj.hasOwnProperty('myProp')) {
// do something
}
다른 방법은 연산자 를 사용 하는 것이지만 여기에도 따옴표 가 필요 합니다 .
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
}
tData.tonicdata[appChoice]
일치하는 속성 / 인덱스가없는 값의 결과 underI
,이는가 발생합니다 TypeError
슬로우합니다.
자신의 재산 :
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'
};
결과에 상속 된 속성을 포함하려면 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
hasOwnProperty
가드를 사용하지 않으면 코드가 안전하거나 안전합니다.
hasOwnProperty
메소드를 덮어 쓰면에 의존 할 수 있습니다Object.prototype.hasOwnProperty.call(object, property)
."