這是我參與更文挑戰的第11天,活動詳情檢視: 更文挑戰
大家好,我是 @Always_positive ,一個認真學習,堅持夢想的部落客,希望和大家一起學習,一起進步。
126. 輸出什麼?
function getFine(speed, amount) {
const formattedSpeed = new Intl.NumberFormat({
'en-US',
{ style: 'unit', unit: 'mile-per-hour' }
}).format(speed)
const formattedAmount = new Intl.NumberFormat({
'en-US',
{ style: 'currency', currency: 'USD' }
}).format(amount)
return `The driver drove ${formattedSpeed} and has to pay ${formattedAmount}`
}
console.log(getFine(130, 300))

答:B,本題主要考察Intl.NumberFormat的用法,意在輸出指定類型的字元串,是以選B。
127. 輸出什麼?
const spookyItems = ["👻", "🎃", "🕸"];
({ item: spookyItems[3] } = { item: "💀" });
console.log(spookyItems);
答:B,本題在解構對象的時候,對數組進行了指派,是以選B。
128. 輸出什麼?
const name = "Lydia Hallie";
const age = 21;
console.log(Number.isNaN(name));
console.log(Number.isNaN(age));
console.log(isNaN(name));
console.log(isNaN(age));
答:C,本題主要是考查我們對Number.isNaN和isNaN這兩種API的用法差別的認識,前者不僅要檢查是否是非數字,還要檢查是否等于NaN,後者則隻用檢查是否是非數字,是以最終的結果選C。
129. 輸出什麼?
const randomValue = 21;
function getInfo() {
console.log(typeof randomValue);
const randomValue = "Lydia Hallie";
}
getInfo();
答:D,這種問題屬于考查臨時性死區的問題,在const形成的塊級作用域中,變量聲明提升了,但是并未初始化,此時調用會産生一個臨時性死區,一旦調用就會報錯。
130. 輸出什麼?
const myPromise = Promise.resolve("Woah some cool data");
(async () => {
try {
console.log(await myPromise);
} catch {
throw new Error(`Oops didn't work`);
} finally {
console.log("Oh finally!");
}
})();
答:C,本題并沒有太多的坑,隻要知道正常的async和await的用法,即可知道選C。
131. 輸出什麼?
const emojis = ["🥑", ["✨", "✨", ["🍕", "🍕"]]];
console.log(emojis.flat(1));
答:B,這裡的flat(1),我們可以了解為将數組降維處理,去掉數組裡面的一維數組,測試案例看這個圖:,是以選B。
132. 輸出什麼?
class Counter {
constructor() {
this.count = 0;
}
increment() {
this.count++;
}
}
const counterOne = new Counter();
counterOne.increment();
counterOne.increment();
const counterTwo = counterOne;
counterTwo.increment();
console.log(counterOne.count);
複制代碼
答:D,本題中counterTwo和counterOne指向的是同一片對象,是以對counterTwo的加就是對counterOne的加,是以最終的結果是3.
133.輸出什麼?
const myPromise = Promise.resolve(Promise.resolve("Promise!"));
function funcOne() {
myPromise.then(res => res).then(res => console.log(res));
setTimeout(() => console.log("Timeout!"), 0);
console.log("Last line!");
}
async function funcTwo() {
const res = await myPromise;
console.log(await res);
setTimeout(() => console.log("Timeout!"), 0);
console.log("Last line!");
}
funcOne();
funcTwo();
複制代碼
答:D,本題主要是考查事件循環機制,詳情請看我的專欄,首先調用棧執行第一個函數中的同步代碼,然後微任務Promise,然後開始執行第二個函數,因為await關鍵字的存在,函數會一直等到Promise的狀态變為resolved才會繼續執行同步代碼,是以列印了Promise,然後執行同步代碼Last line,當調用棧為空的時候,最後執行兩個宏任務setTimeout,先1後2.
134. 如何在index.js中調用sum.js中的sum方法?
// sum.js
export default function sum(x) {
return x + x;
}
// index.js
import * as sum from "./sum";
複制代碼
答:C,本題主要是考查我們對通過import * 導入一個預設暴露函數的了解,隻有通過C是可以的。
135. 輸出什麼?
const handler = {
set: () => console.log("Added a new property!"),
get: () => console.log("Accessed a property!")
};
const person = new Proxy({}, handler);
person.name = "Lydia";
person.name;
複制代碼
答:C,本題主要考查我們對Proxy對象的用法熟悉程度,通過該API,我們可以給對象添加自定義行為,當給對象設定值的時候,set方法會被調用,當調用對象的時候,get方法将會被調用。