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

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