2016-04-11 11 views
3

私はいくつかの投稿とブログを読みましたが、なぜ私のコードが機能していないのかわかりません。javascriptのオブジェクト/プロパティが定義されているかどうか確認してください

マイコード:

function myFunct(d) { 
    if (typeof d.parent.name == "undefined") { 
     console.log("undefined") ;} else { console.log("defined") ;} 
    } 

dのようなものに見えるオブジェクトです:

私は (!d.parent.name)hasOwnProperty===、および typeofを用いて上記のように使用してみました
Object { 
children: Object, 
count: 676 
} 

。助言がありますか?

私が受け取るエラーがあるTypeError: d.parent.name is undefined

UPDATE:入力用

[OK]をみんなありがとう、と私の謝罪の質問が混乱した場合。私は実際にd.parent.parentを探していましたが、d.parentを使用して質問を単純化しようとしました。問題はd.parentが定義されていないので、d.parent.parentにも届かないということです。より具体的ではないことを申し訳ありません!

+0

@ ForceMagic私は同じエラーを受け取ります。 – As3adTintin

+1

'typeof Object === 'undefined''はtypeofを使用する有効な方法です – NickSlash

+0

@NickSlash sry、私の悪い:) – ForceMagic

答えて

5

あなたは未定義セーフなすべての方法あなたのオブジェクトツリーの下をチェックしたい場合は、使用することができます。

if(typeof(((d || {}).parent || {}).name) === 'undefined') { 

} 

をあなたはあなたの処分でLodashを持っていることの贅沢を持っている場合:

var d = { 
    parent: { 
      name: "Joe" 
    } 
}; 

if (typeof (_.get(d, "parent.name")) === 'undefined') { 

} 
+0

面白い、ありがとう@jellyraptor – As3adTintin

2
if(typeof x === 'undefined') 

これを使用して、必要なものだけでなく値もチェックします。

+0

入力していただきありがとうございますが、私はまだ同じエラーを受け取ります – As3adTintin

+0

あなたは既存の値を参照していますか? – ForceMagic

+1

ya @ As3adTintin何らかの理由でd.parent自体が定義されていない場合、スクリプトはd.parent.nameを確認する前にエラーになります。それに注意してください – labago

4

は、私はエラーがプロパティ識別子parentであると考えている論理OR

if (typeof d == "undefined" || 
    typeof d.parent == "undefined" || 
    typeof d.parent.name == "undefined") { 
// ... 
} 
+0

Gah私は同じエラーを受け取ります...私は本当に何か間違っていなければなりません。しかし、提案に感謝します! – As3adTintin

+1

'typeof d ==" undefined "||' if条件の先頭に追加してください。 – ForceMagic

0

とすべての子をチェックしてみてください。あなたのオブジェクトにそのプロパティがあると確信していますか? が存在しないため、識別子dが無効な可能性があります。