2013-07-06 44 views
0

1.我想要ratingClass = 'fresh' if rating > 59 OR if audience_rating > 70。怎麼樣? 我試着用JavaScript If 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.在線路http://pastebin.com/UN8wcB7b 114我得到遺漏的類型錯誤:無法讀取的不確定每〜3秒財產 '長度' 時hideRotten =真。它很容易修復和/或我需要擔心它嗎?

我是JavaScript編程的新手,目前我正在嘗試通過做。你能推薦任何資源來學習使用JavaScript編寫Chrome擴展嗎?

感謝:-)

+0

變化:'如果(data.movi​​es.length> 0){'=>'如果(data.movi​​es && data.movi​​es.length) {'爲了避免錯誤,如果沒有電影。 – dfsq

+0

作爲旁註,不需要在每個「if」塊中重新聲明變量。一旦宣佈,它就會在所有的塊中顯示出來,就像'if'結果一樣。 –

回答

0

那是因爲你正試圖讀取空元素的長度。所以,把一個條件測試,如果電影在上線114的if語句空所以說像

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)你必須檢查首先,如果您的data響應中存在movies屬性(因爲如果不存在,您也無法調用它的長度):

// 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 

...