new
で作成し、作成引数に基づいて にプロパティを割り当てるカスタム Javascript オブジェクトがあります。
function MyObject(argument) {
if (argument) {
this.prop = "foo";
}
}
var objWithProp = new MyObject(true); // objWithProp.prop exists
var objWithoutProp = new MyObject(false); // objWithoutProp.prop does not exist
オブジェクトのプロパティの存在をテストする正しい方法は何ですかprop
? 次のような方法が使用されているのを見たことがありますが、これらの方法のどれが最善の方法であるかはわかりません。
if (obj.prop) {}
if (obj.hasOwnProperty("prop")) {}
if ("prop" in obj) {}
具体的には、このオブジェクトに対してプロパティが明示的に定義されているかどうかをテストすることだけに興味があり、プロトタイプ チェーンではテストしません。また、値が または に設定されることはありませnull
んundefined
が、空のオブジェクトや配列などになる可能性があります。ただし、そのような場合の正しい方法を記載したい場合は、遠慮なく記載してください。
ベストアンサー1
hasOwnProperty
はその通り「このオブジェクトに対してプロパティが明示的に定義されている場合、プロトタイプチェーン内ではない」と指定しているので、探しているものと一致します。https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/hasOwnProperty「このメソッドは、オブジェクトが指定されたプロパティをそのオブジェクトの直接のプロパティとして持っているかどうかを判断するために使用できます。in 演算子とは異なり、このメソッドはオブジェクトのプロトタイプ チェーンをチェックしません。」-- まさに要件に一致しているようです。