这个示例代码做了什么?

时间:2015-10-22 00:37:41

标签: javascript typescript

我在jetbrains.com

上找到了这个例子
async function getWeather(cityid: number){
    var weather = await getForecast(cityid);
    var {t: temperature, h: humidity} = weather;
    return { temperature, humidity};
}

我理解async / await,但我想了解最后两行的情况。

var {t: temperature, h: humidity} = weather;

据我所知,这是创建一个具有两个属性的var,类型温度为t,湿度类型为h。

return { temperature, humidity};

对我来说,这看起来像是在返回一个带有两个子对象,温度和湿度的新对象。我不知道它是如何从天气对象那里得到的。

我不知道这是一个javascript问题,还是一个打字稿问题,因此我将其标记为两者。

2 个答案:

答案 0 :(得分:5)

  

var {t:temperature,h:humidity} = weather;

这称为解构。这是一个概念:https://basarat.gitbooks.io/typescript/content/docs/destructuring.html

您要说的是weather.ttempratureweather.h放入humidity

  

返回{温度,湿度};

这将返回一个包含属性tempraturehumidity的对象。这是:return { temperature:temperature, humidity:humidity};的简写。这是ES6中的新标记之一:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer

答案 1 :(得分:4)

var {t: temperature, h: humidity} = weather;是来自ES6的一个非常强大的新语法功能,名为destructing

假设weather是对象{ t: 60, h: 20 }。传统上,当我们想要将weather的属性分配给局部变量时,我们会做类似的事情:

var temperature = weather.temperature;
var humidity = weather.humidity; 

这非常不方便,随着物体变得越来越复杂,它将越来越无聊。通过破坏,我们现在可以使用

var {t: temperature, h: humidity} = weather;
console.log(temperature); // 60
console.log(humidity); // 20

并且已经定义了本地变量temperaturehumidity并准备好使用。

解构还为" target"的情况提供了更短的语法。变量与" source"相同。变量。在weather的情况下,而不是写:

var {t: t, h: h} = weather;
console.log(t); // 60
console.log(h); // 60

我们可以写:

var {t, h} = weather;
console.log(t); // 60
console.log(h); // 60