每日3題 1 以下代碼執行後,控制臺中的輸出內容為? console.log(+true, !'hello') 2 點擊p標簽時,會輸出什麼 const numbers=[1,2,3,4,5] const [y] = numbers console.log(y) 3 以下代碼執行後,控制臺中的輸出內 ...
每日3題
1 以下代碼執行後,控制臺中的輸出內容為?
console.log(+true, !'hello')
2 點擊p標簽時,會輸出什麼
const numbers=[1,2,3,4,5]
const [y] = numbers
console.log(y)
3 以下代碼執行後,控制臺中的輸出內容為?
const fn = (x) => (y) => (z) => {
console.log(x, y, z);
};
fn(1)(2)(3);
- 公眾號【今天也要寫bug】更多前端面試題
答案及解析
1
// 答案:1 false
// 考察運算符和類型轉換
// 相加運算符:如果+兩邊有字元串,則將兩者拼接為字元串,否則進行相加運算
// +true,會將 true 轉換成數字 1,最終輸出 1
console.log(+true, !"hello");
// 在 JS 中,假值有:null;NaN;0;空字元串 ("" or '' or ``);undefined.
// 除此之外都是真值
// !真值 => 假值,!假值 => 真值
// 所以 !"hello" 為 false
2
// 答案:1
// 考察 ES6 數組的解構賦值
// ES6 允許寫成這樣:
// let [a, b, c] = [1, 2, 3]
// 這種寫法可以從數組中提取值,按照對應位置,對變數賦值
const numbers = [1, 2, 3, 4, 5];
const [y] = numbers; // y 對應 1
console.log(y); // 故輸出 1
3
// 答案:1 2 3
// 考察箭頭函數的閉包和函數調用的結合性
const fn = (x) => (y) => (z) => {
console.log(x, y, z);
};
// fn 相當於:
const fn = (x) => {
return (y) => {
return (z) => {
console.log(x, y, z);
};
};
};
fn(1)(2)(3); // 函數調用的結合性是從左到右,等價於
const f1 = fn(1); // (y) => {...}
const f2 = f1(2); // (z) => { console.log(x, y, z); }
f2(3); // 輸出 1 2 3