2016-04-11 2 views
3

Итак, я прочитал несколько сообщений SO и некоторых блогов, но до сих пор не могу понять, почему мой код не работает.Проверьте, существует ли объект/свойство javascript

Мой код:

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

d это объект, который выглядит примерно так:

Object { 
children: Object, 
count: 676 
} 

Я попытался с помощью (!d.parent.name), hasOwnProperty, ===, и, как описано выше, используя typeof. Какие-либо предложения?

Ошибка я получаю это 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, my bad :) – 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

Попробуйте проверить все ребенок с логической OR

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

Gah Я получаю ту же ошибку ... Я действительно должен делать что-то неправильно. Спасибо, хотя за предложения! – As3adTintin

+1

Добавить 'typeof d ==" undefined "||' в начало условия if – ForceMagic

0

Я считаю, что ошибка является идентификатором свойства parent. Вы уверены, что у вашего объекта есть свойство? Идентификатор d может быть недействительным, поскольку parent не существует.

Смежные вопросы