774

問題のプロパティ名を保持する変数を持つオブジェクト プロパティの存在を確認しています。

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

4

10 に答える 10

1469
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')はありません。

于 2012-06-14T20:01:03.240 に答える
58

hasOwnPropertyを使用できますが、参照に基づいて、このメソッドを使用する場合は引用符が必要です。

if (myObj.hasOwnProperty('myProp')) {
    // do something
}

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

もう 1 つの方法はin演算子を使用することですが、ここでも引用符が必要です。

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

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

于 2015-05-10T07:22:07.810 に答える
25

みんなの支援と eval ステートメントを取り除くための推進に感謝します。変数は、ドット表記ではなく、括弧で囲む必要がありました。これは機能し、クリーンで適切なコードです。

これらはそれぞれ変数です: appChoice、underI、underObstr。

if(typeof tData.tonicdata[appChoice][underI][underObstr] !== "undefined"){
    //enter code here
}
于 2012-06-15T15:15:56.800 に答える