1

1.我要ratingClass = 'fresh' if rating > 59 OR if audience_rating > 70。如何?我试过了

如果(评分> 59)|| (观众评分> 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 行中,当 hideRotten = true 时,我得到 Uncaught TypeError: Cannot read property 'length' of undefined per ~3 seconds。它是否容易修复和/或我是否需要担心它?

我是 JavaScript 编码的新手,目前我正在尝试边做边学。你能推荐任何资源来学习用 JavaScript 编写 Chrome 扩展吗?

谢谢 :-)

4

3 回答 3

1

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

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

尽管如果您在此 if 语句中设置一些数据,这些数据将在代码中的其他地方使用,您可能还必须在其他地方进行类似的检查,以完全避免此类问题。

于 2013-07-06T13:31:31.927 回答
1

1) 后面的条件if必须始终完全用括号括起来:

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

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

或者如果您不确定运算符优先级

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)

* 不完全是,阅读这篇文章为什么

于 2013-07-06T13:34:09.000 回答
1

错误肯定意味着

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

...

于 2013-07-06T13:38:28.837 回答