每日3題 28 以下代碼執行後,控制臺中的輸出內容為? function showCase(value){ switch(value){ case 'A': console.log('case A'); break; case 'B': console.log('case B'); break; c ...
每日3題
28 以下代碼執行後,控制臺中的輸出內容為?
function showCase(value){
switch(value){
case 'A':
console.log('case A');
break;
case 'B':
console.log('case B');
break;
case undefined:
console.log('undefined');
break;
default:
console.log('Do not know');
}
}
showCase(new String('A'));
29 以下代碼執行後,控制臺中的輸出內容為?
function f(){}
const a = f.prototype,
b = Object.getPrototypeOf(f);
console.log(a===b);
30 以下代碼執行後,控制臺中的輸出內容為?
console.log(typeof null)
console.log(null instanceof Object)
公眾號【今天也要寫bug】更多前端面試題
答案與解析
28
// 答案:Do not know
// 考察基本字元串、字元串對象和 switch
// 字元串字面量是 string 類型
// 字元串對象是 object 類型
// switch 使用嚴格運算符(===)來進行比較
// 在下麵 switch case 沒有匹配的 case,因此走的是 default
function showCase(value) {
switch (value) {
case "A":
console.log("case A");
break;
case "B":
console.log("case B");
break;
case undefined:
console.log("undefined");
break;
default:
console.log("Do not know");
}
}
showCase(new String("A"));
29
// 答案:false
// 考察原型鏈
// 函數本身也是對象
// 函數作為對象,是new Function 構造函數產生的,所以 f.__proto__ => Function.prototype
// 函數的 f.prototype 則預設是一個空對象,和 f.__proto__ 沒有關係
function f() {}
const a = f.prototype,
b = Object.getPrototypeOf(f);
console.log(a === b);
// Object.getPrototypeOf 方法返回對象的原型對象即 f.__proto__
// f.prototype 不等於 f.__proto__
// 最終輸出 false
30
// 答案:object false
// 考察 typeof、instanceof、原型鏈
console.log(typeof null); // 記住就好了 typeof null 為 object
console.log(null instanceof Object);
// instanceof運算符用於檢測構造函數(右邊)的 prototype 屬性是否出現在實例對象(左邊)的原型鏈上
// null 是原型鏈的終點,Object.prototype 當然不會出現在 null 的原型鏈上