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扩展程序?
谢谢:-)
答案 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)
答案 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
...