天天看點

155個JavaScript基礎問題(126-135)

這是我參與更文挑戰的第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))
      
155個JavaScript基礎問題(126-135)

答:B,本題主要考察Intl.NumberFormat的用法,意在輸出指定類型的字元串,是以選B。

127. 輸出什麼?

const spookyItems = ["👻", "🎃", "🕸"];
({ item: spookyItems[3] } = { item: "💀" });
console.log(spookyItems);      
155個JavaScript基礎問題(126-135)

答: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));      
155個JavaScript基礎問題(126-135)

答:C,本題主要是考查我們對Number.isNaN和isNaN這兩種API的用法差別的認識,前者不僅要檢查是否是非數字,還要檢查是否等于NaN,後者則隻用檢查是否是非數字,是以最終的結果選C。

129. 輸出什麼?

const randomValue = 21;
function getInfo() {
    console.log(typeof randomValue);
    const randomValue = "Lydia Hallie";
}
getInfo();      
155個JavaScript基礎問題(126-135)

答: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!");
    }
})();      
155個JavaScript基礎問題(126-135)

答:C,本題并沒有太多的坑,隻要知道正常的async和await的用法,即可知道選C。

131. 輸出什麼?

const emojis = ["🥑", ["✨", "✨", ["🍕", "🍕"]]];
console.log(emojis.flat(1));      
155個JavaScript基礎問題(126-135)

答: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方法将會被調用。

題目來源

github.com/lydiahallie…

繼續閱讀