JavaScript If Statement + Uncaught TypeError

时间:2013-07-06 13:19:10

标签: javascript

1。我想要ratingClass = 'fresh' if rating > 59 OR if audience_rating > 70。怎么样? 我试过

  

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行中,我得到了未捕获的TypeError:当hideRotten = true时,每隔~3秒无法读取未定义的属性“长度”。是否容易修复和/或我是否需要担心它?

我是JavaScript编码的新手,目前我正在努力学习。您能否推荐任何资源来学习使用JavaScript编写Chrome扩展程序?

谢谢:-)

3 个答案:

答案 0 :(得分:0)

这是因为您正在尝试读取null元素的长度。因此,设置一个条件来测试第114行的if语句中的电影是否为空,因此它表示类似

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

虽然如果你在if语句中设置了一些将用于代码中其他地方的数据,你可能必须在其他地方放置这样的检查以完全避免这类问题。

答案 1 :(得分: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属性,则必须先检查(因为如果不存在,您也无法在其上调用长度):

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

答案 2 :(得分: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

...