javascript - Bu örnek kod ne yapar?
Bu örneği jetbrains.com'da buldum
async function getWeather(cityid: number){
var weather = await getForecast(cityid);
var {t: temperature, h: humidity} = weather;
return { temperature, humidity};
}
Async/await'i anlıyorum, ama son iki satırda neler olup bittiğini anlamaya çalışıyorum.
var {t: temperature, h: humidity} = weather;
Benim anladığım kadarıyla, bu, türü sıcaklık olan t ve türü nem olan h olmak üzere iki özelliğe sahip bir değişken oluşturuyor.
return { temperature, humidity};
Bana göre, bu iki alt obje, sıcaklık ve nem içeren yeni bir obje döndürüyor gibi görünüyor. Havanın nesnesinden bunu nasıl elde ettiğini anlamıyorum.
Bunun bir javascript sorusu mu yoksa typescript sorusu mu olduğunu bilmiyorum, bu yüzden ikisini de etiketliyorum.
Cevap #1
var {t: sıcaklık, h: nem}=weather;
Buna destructuring denir. Bu kavram burada ele alınmaktadır: https://basarat.gitbooks.io/typescript/content/docs/destructuring.html
Burada weather.t öğesini temprature öğesine ve weather.h öğesini humidity öğesine koyun diyorsunuz.
return { sıcaklık, nem };
Bu, temprature ve humidity özelliklerine sahip bir nesne döndürüyor. Bu, şunun kısaltmasıdır: return { temperature:temperature, humidity:humidity};. Bu, ES6'daki yeni gösterimlerden biridir: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer
Cevap #2
var {t: temperature, h: humidity}=weather; ES6'tan gelen ve 'destructing' olarak adlandırılan çok güçlü yeni bir sözdizimsel özelliktir.
Varsayalım ki weather bir nesne { t: 60, h: 20 }. Geleneksel olarak, weather'in özelliklerini yerel değişkenlere atamak istediğimizde, şunları yapardık:
var temperature = weather.temperature;
var humidity = weather.humidity;
Bu gerçekten rahatsız edici ve nesne daha karmaşık hale geldikçe giderek daha yorucu olacak. Yıkımla, artık kullanabiliriz
var {t: temperature, h: humidity} = weather;
console.log(temperature); // 60
console.log(humidity); // 20
Ve yerel değişkenlerin temperature ve humidity zaten tanımlanmış ve kullanıma hazır olduğundan emin olun.
Değişken çözümleme ayrıca, "hedef" değişkenler ile "kaynak" değişkenler aynı olduğunda daha kısa bir sözdizimi sağlar. weather durumu için, aşağıdaki şekilde yazmak yerine:
var {t: t, h: h} = weather;
console.log(t); // 60
console.log(h); // 60
Sadece şunu yazabiliriz:
var {t, h} = weather;
console.log(t); // 60
console.log(h); // 60
