JavaScript温度转换功能不起作用

时间:2013-11-05 04:00:06

标签: javascript function object

所以我试图创建一个温度转换函数,它接受一个具有数值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]

3 个答案:

答案 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