1

因此,我试图创建一个温度转换函数,该函数接收具有数值温度属性和华氏或摄氏温度属性的对象(var temperature)作为参数,但是当我稍后提醒该函数时,它只返回 [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]
4

3 回答 3

1

另一个有趣的 JavaScript 类型强制示例,它为新手掩盖了错误的本质!

每当您"[object Object]"在 JS 程序的输出中看到时,都会出现类型不匹配,其中非原始对象被放置在需要字符串的地方(除非您想"[object Object]"特别查看)。在您的情况下,convertTemperature返回一个对象;alert需要一个字符串。可悲的是,与其引发某种危险信号,alert不如默默地将您的对象(或数字,或您拥有的东西)强制转换为字符串。除非您覆盖toString您的对象,否则它将始终被强制为"[object Object]".

但是,您问题的根源似乎是对 JS 中对象语法的根本误解。如果您发布了导致您选择引入for循环的代码,我相信我们会首先看到一个明显的(对于 JS 退伍军人)导致问题的错误。我敢打赌你尝试过类似的事情:

if (temperature[tempUnits] === "f") {

访问名为is或完全相同tempUnits的对象的属性的正确语法。当您编写 时,JS 认为您有一些其他变量命名,您试图将其用作属性名称。由于没有这样的变量,因此 - 的值不是的属性。temperaturetemperature.tempUnitstemperature["tempUnits"]temperature[tempUnits]tempUnitstempUnitsundefinedtemperature

于 2013-11-05T05:53:06.060 回答
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);
于 2013-11-05T04:04:26.467 回答
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
于 2013-11-05T04:06:17.923 回答