問題のプロパティ名を保持している変数を持つオブジェクトプロパティの存在を確認しています。
var myObj;
myObj.prop = "exists";
var myProp = "p"+"r"+"o"+"p";
if(myObj.myProp){
alert("yes, i have that property");
};
これはmyObj.myProp
を探しているのでundefined
ですが、私はそれが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 を使用できますが、このメソッドを使用する場合は、参照に基づいて quotes を使用します。
if (myObj.hasOwnProperty('myProp')) {
// do something
}
もう1つの方法は in 演算子を使用することですが、ここでも 引用符 が必要です。
if ('myProp' in myObj) {
// do something
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
みなさんの支援とevalステートメントの削除を推進していただきありがとうございます。変数はドット表記ではなく大括弧で囲む必要があります。これは機能し、クリーンで適切なコードです。
これらはそれぞれ変数です:appChoice、underI、underObstr。
if(typeof tData.tonicdata[appChoice][underI][underObstr] !== "undefined"){
//enter code here
}
オブジェクトにプロパティが存在するかどうかを確認するためのもっと安全な方法は、空のオブジェクトまたはオブジェクトプロトタイプを使用して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
自分の財産の場合:
var loan = { amount: 150 };
if(Object.prototype.hasOwnProperty.call(loan, "amount"))
{
//will execute
}
注:Object.prototype.hasOwnPropertyを使用すると、カスタムhasOwnPropertyがプロトタイプチェーンで定義されている場合(ここではそうではありません)、loan.hasOwnProperty(..)よりも優れています。
var foo = {
hasOwnProperty: function() {
return false;
},
bar: 'Here be dragons'
};
継承されたプロパティを検索結果に含めるには、in演算子を使用します(ただし、 'in'の右側にオブジェクトを配置する必要があります。プリミティブ値は、たとえば'length' in 'home'はエラーをスローしますが、'string' in new String( 'home') not's)
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
}
in
演算子と同様にhasOwnProperty()
を使用できます。