繁体   English   中英

Javascript对象返回未定义

[英]Javascript object returns undefined

var movies = 
[
{name: "In Bruges", rating:"4.7", seen:false},
{name: "Frozen", rating: "4.5", seen:true},
{name: "Lion King", rating:"5", seen:true},
]


for (var i = 0; i < movies.length; i++) {
    var result = "You have ";
    if(movies.seen === true){
        result += "watched ";
    }
    else{
        result += "not seen ";
    }
    result += "\"" + movies.name + "\" - ";
    result += movies.rating + " stars"
    console.log(result)
};

You have not seen "undefined" - undefined stars is the result in chrome however you should see You have seen/not seen "movie name" - "rating" stars.

我需要使用for循环来打印出我看过的每部电影并对其进行评级,以及是否看过电影。 问题是为什么它没有定义? 代码是否应该看到movie.rating并在其中替换值? 有人可以检查我的代码并为我的for循环提供帮助吗?

movies是一个数组movies movies.seen无法使用movies[i].seen和其他属性一样明智

movies.seenmovies.ratingmovies.name更改为movies.seen movies[i].seenmovies[i].seen movies[i].ratingmovies[i].rating movies[i].name

使用索引访问数组的项目; 例如movies[i]

for (var i = 0; i < movies.length; i++) {
    var result = "You have ";
    if(movies[i].seen === true){
        result += "watched ";
    }
    else{
        result += "not seen ";
    }
    result += "\"" + movies[i].name + "\" - ";
    result += movies[i].rating + " stars"
    console.log(result)
}

或者,您可以将数组项存储在变量中,然后像这样使用它:

for (var i = 0; i < movies.length; i++) {
    var movie = movies[i];
    var result = "You have ";
    if (movie.seen) {
        result += "watched ";
    }
    else {
        result += "not seen ";
    }
    result += '"' + movie.name + '" - ';
    result += movie.rating + " stars";
    console.log(result);
}

这是一个工作正常的柱塞,供您查看它的正常工作。 :)

var movies = 
[
{name: "In Bruges", rating:"4.7", seen:false},
{name: "Frozen", rating: "4.5", seen:true},
{name: "Lion King", rating:"5", seen:true},
]


for (var i = 0; i < movies.length; i++) {
    var result = "You have ";
    if(movies[i].seen === true){
        result += "watched ";
    }
    else{
        result += "not seen ";
    }
    result += "\"" + movies[i].name + "\" - ";
    result += movies[i].rating + " stars"
    alert(result)
}

您试图访问的电影的属性seemnamerating ,但是电影有3个对象,索引从0到2。

您正在循环中使用影片,而影片不包含这些属性。 而且在迭代数组时使用forEach循环始终是安全的

做类似的事情

movies.forEach(function(movie){
var result = "You have ";
    if(movie.seen === true){
        result += "watched ";
    }
    else{
        result += "not seen ";
    }
    result +=  movie.name + " - ";
    result += movie.rating + " stars";
    console.log(result);

});

我建议使用其他方法迭代数组,并检查是否已看过电影。

 var movies = [ { name: "In Bruges", rating: "4.7", seen: false }, { name: "Frozen", rating: "4.5", seen: true }, { name: "Lion King", rating: "5", seen: true }, ]; movies.forEach(function (movie) { var result = "You have "; result += movie.seen ? "watched " : "not seen "; result += "\\"" + movie.name + "\\" - "; result += movie.rating + " stars" document.write(result + '<br>'); }); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM