所以我试图创建一个温度转换函数,它接受一个具有数值temp属性和华氏温度或Celsius表示属性作为参数的对象(var温度),但是当我稍后警告该函数时它只返回[object Object]。我不确定如何访问温度范围内的特定属性,因为如果我不使用for ... in循环它会说它们是未定义的。下面是我最好的尝试,让函数返回一个包含转换的数值温度值的对象以及更改的tempUnits属性值。谢谢你的帮助!
var temperature = {
temp: 75,
tempUnits: "f" // means Fahrenheit (°F) or Celsius (°C), °F here.
};
// (°F - 32) * (5/9) = °C
// (°C) * (9/5) + (32) = °F
var convertTemperature = function (object) {
for (var prop in object) {
if (object[prop] === "f") {
var temperatureC = {
temp: (((object[prop]) - 32) * (5 / 9)),
tempUnits: "c"
};
return temperatureC;
} else if (object[prop] === "c") {
var temperatureF = {
temp: (((object[prop]) * (9 / 5)) + 32),
tempUnits: "f"
};
return temperatureF;
}
}
};
alert(convertTemperature(temperature)); // returns [object Object]
答案 0 :(得分:1)
你是以一种奇怪的,迂回的方式做到的:
var temperature = {
temp: 75,
tempUnits: "f" // means Fahrenheit (°F) or Celsius (°C), °F here.
};
// (°F - 32) * (5/9) = °C
// (°C) * (9/5) + (32) = °F
var convertTemperature = function (o) {
var val = o.temp;
if (o.tempUnits === 'f') {
return temperatureC = {
temp: ((val - 32) * (5 / 9)),
tempUnits: "c"
};
} else {
return {
temp: ((temp * (9 / 5)) + 32),
tempUnits: "f"
};
}
};
var o = convertTemperature(temperature);
alert(o.temp + ' ' + o.tempUnits);
答案 1 :(得分:1)
另一个有趣的JavaScript类型强制示例,模糊了新手的错误性质!
每当你在JS程序的输出中看到"[object Object]"
时,就会出现类型不匹配的情况,其中非原始对象被放置在一个期望字符串的地方(除非你想特别看{4}} )。在您的情况下,"[object Object]"
返回一个对象; convertTemperature
需要一个字符串。可悲的是,alert
没有提出某种红旗,而是默默地将你的对象(或数字,或者你有什么)强制成一个字符串。除非您在对象上覆盖alert
,否则它将始终强制为toString
。
然而,问题的根源似乎是对JS中对象语法的基本误解。如果您发布了导致您选择引入"[object Object]"
循环的代码,我相信我们会看到一个明显(对于JS退伍军人)错误导致问题出现在第一位。我敢打赌你尝试了类似的东西:
for
访问名为if (temperature[tempUnits] === "f") {
的对象名为tempUnits
的属性的正确语法是temperature
或完全等效的temperature.tempUnits
。当您编写temperature["tempUnits"]
时,JS认为您有一些名为temperature[tempUnits]
的变量,其值您尝试将其用作属性名称。由于没有此类变量,tempUnits
的值为tempUnits
- 这不是undefined
的属性。
答案 2 :(得分:0)
在最后一行:
var convertTemperature = function (object) {
for (var prop in object) {
if (object[prop] === "f") {
var temperatureC = {
temp: (((object[prop]) - 32) * (5 / 9)),
object[prop]
的值为'f'
。您想要的是object['temp']
或object.temp
。
由于您传递的是具有固定属性名称的对象,只需执行:
function convertTemperature(obj) {
if (obj.tempUnits == 'f') {
return {temp: (obj.temp - 32) * 5 / 9, tempUnits: 'c'};
}
return {temp: obj.temp * 9 / 5 + 32, tempUnits: 'f'};
}
alert(convertTemperature({temp:212,tempUnits:'f'}).temp); // 100