面試官:請問以下控制臺輸出的值是?

關注公眾號?前端人,回復“加群”
添加無廣告優(yōu)質學習群
請問以下控制臺輸出的值是?
const?hocCoBan?=?{};
Object.defineProperty(hocCoBan,?"domain",?{
????value:?"hoccoban.com",????
})
async?function?App({year,?age}){?
?return?year?-?age?+?hocCoBan.domain.length;
}
App({year:?2021,?age:?30}).then((r)=>{
??console.log(r)
});
選項
A: 2051 B: 2001 C: 30 D: 2003
答案
D
解答
上面的代碼段似乎很復雜,涉及到我們如何利用Object.defineProperty向對象添加鍵和值的優(yōu)勢hocCoBan。
實際上,Object.defineProperty它具有幾個方便的功能,這些功能使我們可以在某些情況下控制對象的行為,在這些情況下,我們要確保創(chuàng)建的對象是否可變,是否可迭代(使用for..in)等等。
例如,如果使用configurable: false聲明對象時進行設置Object.defineProperty,則無法使用delete運算符刪除該對象的屬性。我們也不能更改該屬性的值。
閱讀上面的代碼時,第二條“帶走”消息是解包對象技術,或更常見的術語是破壞對象。假設您有一個帶有兩個稱為year和的鍵的對象age,然后可以通過使用如下的銷毀對象技術來獲得它們:
{year,?age}?=?theOBject;
在上面的代碼中,在聲明函數時App,我們還使用銷毀對象技術從對象中獲取鍵并將它們用作參數。
如果您在使用關鍵字時熟悉JavaScript中的異步代碼,async,那么了解為什么我們需要使用它then來App調用函數就沒什么大不了的了。實際上,async總是返回一個承諾,因此我們需要使用then方法來獲取所需的數據。
代碼流為:
2021-30?+?"hoccoban.com".length(即12)。
最終結果是2003。因此正確答案是D。
本題已收錄于以下刷題小程序
回復 資料包領取我整理的進階資料包回復 加群,加入前端進階群console.log("點贊===再看===快樂")Bug離我更遠了,快樂離我更近了
評論
圖片
表情
