問題のプロパティ名を保持する変数を使用して、オブジェクトプロパティの存在を確認しています。
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」はエラーをスローしますが、「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/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)
。」