Javascript,对象,函数和案例陈述问题

时间:2016-09-09 21:55:07

标签: javascript function object switch-statement

你好我现在正在空闲时间使用www.codeacademy.com网站学习javascript。

一个示例要求我创建一个对象,然后调用一个函数来搜索这些对象的名称。哪个对象都有名称,那么所有属性都应显示在屏幕上。我可以使用if else语句轻松完成此操作。令我困惑的是我无法使用案例陈述。它不是选择正确的案例,而是“总是”挑选第一个案例。我的代码如下。它包括一些调试行,试图帮助我理解为什么它不符合我的想法:

var movie = {};

movie.toyStory2 = {
     name: "Toy Story 2",
     review: "Great story. Mean prospector."
};

movie.findingNemo = {
     name: "Finding Nemo",
     review: "Cool animation, and funny turtles."
};

movie.theLionKing = {
     name: "The Lion King",
     review: "Great songs."
};

var list = function(obj) {
     for (var prop in obj) {
          console.log(1,prop);
     }
};

var getReview = function (name) {
     for (var name in movie) {
          console.log(2, name);  // debug line
          console.log(3, movie); // debug line

          switch (movie) { // debug line  i have used different switches to no avail
                          // movie  prop  name  amongst others, though logically
                          // i think this should work
               case "Toy Story 2":
                    console.log(4, movie[name].review); // debug line
                    return movie[name].review;
                    break;
               case "Finding Nemo":
                    console.log(5, movie[name].review); // debug line
                    return movie[name].review;
                    break;
               case "The Lion King":
                    console.log(666, movie[name].review); // debug line
                    return movie[name].review;
                    break;
               default:
                    console.log(7, movie[name].review); // debug line
                    return ("I don't know!");
                    break;
          }
    }
};

list(movie);
//getReview("Toy Story 2"); // debug line
//getReview("Finding Nemo"); // debug line
getReview("The Lion King");

对象是我编程中最难理解的部分,任何帮助都会非常感激,请轻轻一点:D

我没想到会立即回复任何回复,感谢您的建议。我把它带到船上并清理了我的帖子。道歉

1 个答案:

答案 0 :(得分:-1)

switch语句不查找名称与name参数匹配的对象。它只是遍历每个case语句,直到找到一个与for循环中当前属性的名称匹配的语句。由于对象中的第一个属性具有name = "Toy Story 2",因此第一个case语句匹配。因此它执行console.log()语句,然后从函数返回。

没有理由为此使用switch语句。它应该是:

for (var prop in movie) {
    if (movie[prop].name == name) {
        console.log(5, movie[prop].name);
        return movie[prop].review;
    }
}