你好我现在正在空闲时间使用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
我没想到会立即回复任何回复,感谢您的建议。我把它带到船上并清理了我的帖子。道歉
答案 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;
}
}