2016-05-05 3 views
0

Я пытаюсь проверить, существует ли какой-либо конкретный объект javascript.Оператор typeof работает не так, как ожидалось

var success = function(data) { 

    var x= 0; 
    var numOfCards = data.length; 

    for (x=0;x<data.length - 1;x++) 
     { 
      if (typeof data[x].labels[0].name !== 'undefined') 
      { 
       alert("Object Exists"); 
      } 
     } 
    } 

Однако Chrome получает следующее сообщение об ошибке:

(index):21 Uncaught TypeError: Cannot read property 'name' of undefined

Конечно, мое использование TYPEOF, чтобы проверить состояние объекта не должно само по себе приведет к ошибке? На первой итерации отображается предупреждение окна, как ожидается, потому что:

data[0].labels[0].name = "I am a value"

Однако

data[0].labels[1].name

вызывает ошибку как «метка» массив пуст.

+0

'typeof' просто возвращает« тип »значения. Вы можете получить ошибку при оценке выражения, которое генерирует значение. Пример: 'typeof foo()'. Если 'foo' не является функцией, это вызовет ошибку. –

ответ

4

Это определенно работает как ожидалось.

Surely, my use of typeof to check the status of the object should not, in itself, result in an error?

Несомненно, если name не определены. В этом случае data[0].labels[0] уже не определено!

Вам нужно было бы вложить if с помощью typeof для каждого уровня, если вы хотите разрешить всем уровням быть undefined, прежде чем рассматривать вложенные объекты в нем.

+0

Как я хочу, чтобы Javascript имел встроенные операторы существования, подобные Coffeescript и Ruby, так что вы не обременены накладными расходами вручную, записывая эти вложенные проверки. например 'data [0] ?. метки [0] ?. name' – jusopi

+0

https://github.com/Kikobeats/existential –

0

перед проверкой, если TYPEOF данные [х] .labels [0] .name! == 'не определено', убедитесь, что TYPEOF данные [х] .labels [0]! == «не определено

if (typeof data[x].labels[0] !== 'undefined') 
{ 
    alert("Object Exists"); 
}