2013-07-06 4 views
0

1. Я хочу ratingClass = 'fresh' if rating > 59 OR if audience_rating > 70. Как? Я попытался сJavaScript If Statement + Uncaught TypeError

if (rating > 59) || (audience_rating > 70) {

var ratingClass = 'fresh'; 

Вот код:

if (rating > 59) { 
    var ratingClass = 'fresh'; 
} else if (rating > 0){ 
    var ratingClass = 'rotten'; 
} else { 
    var ratingClass = 'na'; 
} 
if (audience_rating > 59) { 
    var audienceClass = 'fresh'; 
} else if (audience_rating > 0){ 
    var audienceClass = 'rotten'; 
} else { 
    var audienceClass = 'na'; 
} 
$parentEl.addClass(ratingClass); 

2. В строке 114 из http://pastebin.com/UN8wcB7b я получаю неперехваченным TypeError: Не удается прочитать свойство «длина» неопределенных каждые ~ 3 секунды, когда hideRotten = true. Легко ли это исправлять и/или мне вообще нужно об этом беспокоиться?

Я новичок в кодировании JavaScript, в настоящее время я стараюсь учиться. Можете ли вы порекомендовать какие-либо ресурсы для изучения написания расширений Chrome с помощью JavaScript?

Спасибо :-)

+0

Изменение: 'если (data.movies.length> 0) {' => 'если (data.movies && data.movies.length) {', чтобы избежать ошибок, если нет фильмов. – dfsq

+0

В качестве побочного элемента нет необходимости обновлять переменные в каждом блоке 'if'. После объявления он отображается во всех блоках, в отношении результата 'if'. –

ответ

0

это потому, что вы пытаетесь прочитать длину нулевого элемента. Так поставил условие, чтобы проверить, если фильмы являются недействительными в вашем заявлении, если на линии 114, так он говорит что-то вроде

if(data.movies && data.movies.length > 0) 

Хотя, если вы устанавливаете некоторые данные в этом случае заявление, которое будет использоваться в других местах в коде вам, возможно, придется поместить такие проверки в других местах, чтобы полностью избежать подобных проблем.

0

1) состояние после if должны всегда быть полностью окружены в квадратных скобках:

// wrong 
if (rating > 59) || (audience_rating > 70) { 

// has to be: 
if (rating > 59 || audience_rating > 70) { 

или если вы не знаете о operator precedence:

if ((rating > 59) || (audience_rating > 70)) { 

2) Вы должны проверить во-первых, если атрибут movies существует в вашем data respone (потому что, если он этого не делает, вы также не можете называть его длину):

// can throw error if data.movies === undefined 
data.movies.length > 0 

// the safe way, check data.movies first: 
if (data.movies && data.movies.length > 0) 

это в значительной степени эквивалентно длинной версии *:

if (typeof(data.movies) === `undefined` && data.movies.length > 0) 

*Not exactly, read this article why

0

Ошибка определенно означает

typeof data.movies === "undefined" 

, чтобы избежать этого я порекомендует

...

$.getJSON(movieUrl, function(data){ 
    // data can be undefined becoz of various reasons and so is data.movies 
    if(!(typeof data === "undefined") && !(typeof data.movies === "undefined")) { 
    //put similar checks in ur code 

...