2016-05-31 4 views
0

Следующий тест генерирует ошибку, если ответ не имеет свойства msgs[0].Проверьте свойство только в том случае, если оно существует?

if response.msgs[0] === "published" { ... } 

Ошибка:

Uncaught TypeError: Cannot read property '0' of undefined 

Как я могу переписать тест, чтобы генерировать ошибку? Если нет свойства msgs[0], я хочу, чтобы тест оценивался до false.

+0

'response.hasOwnProperty ('сбщ')' – Rayon

+0

@Rayon - Это будет возвращать 'true' даже если значение' undefined', в в этом случае доступ к '[0]' будет по-прежнему выдавать ошибку, указанную в вопросе. – Quentin

+0

@Quentin, True! 'False', только если ключ вообще не существует :) – Rayon

ответ

7

ответ не имеет сообщ [0] недвижимость

Это неправильно. Он выдает ошибку, потому что у нее нет свойства msgs, а не потому, что на нем нет свойства 0.

Вам необходимо проверить, существует ли msgs перед тестированием, что такое 0.

if (response.msgs && response.msgs[0] === "published") { ... } 
+0

Даже если' msgs' определен, 'msgs [0]' все равно выдаст ошибку ('Unexpected end of input'), если' [0] 'недоступен , – Eric

+1

@ErikKralj - Нет, это не будет: http://jsbin.com/zuhose/2/edit?js,console – Quentin

+0

Вы правы, это не так, мое плохое. – Eric

3

тест, если response.msgs определяется первым:

if response.msgs && response.msgs[0] === "published" { ... }