每日3題
22 以下代碼執行后,控制臺中的輸出內容為?
var a = [1, 2, 3];
a.join = a.shift;
console.log(a == 1 && a == 2 && a == 3);
23 以下代碼執行后,控制臺中的輸出內容為?
var arr = [0, 1];
arr[5] = 5;
var newArr = arr.filter((x) => {
return x === undefined;
});
console.log(newArr.length);
24 以下代碼執行后,控制臺中的輸出內容為?
const value = 'https://www.cnblogs.com/bidong/archive/2022/09/06/value is' + !!Number(['0']) ? 'aaa' : 'bbb';
console.log(value);
公眾號【今天也要寫bug】獲取更多前端面試題
答案與決議
22
// 答案:true
// 考察強制型別轉換
// == 操作會進行強制型別轉換
// 如果運算元之一是物件,另一個是數字或字串,
// 會嘗試使用物件的valueOf()和toString()方法將物件轉換為原始值,
// 如果 valueOf 回傳基本型別,就按該值進行轉換,否則按 toString 的回傳值轉換
// 陣列的 valueOf 回傳它本身,所以按 toString 的回傳值進行轉換
// 對于陣列物件,toString 方法在內部呼叫 join() 方法
var a = [1, 2, 3];
a.join = a.shift; // 在陣列 a 上定義了一個 join 方法,并且該方法是 shift 的功能
console.log(a == 1 && a == 2 && a == 3);
// a == 1,觸發型別轉換
// 觸發 a.toString() 內部呼叫 a.join(),即 a.shift() 回傳 1,同時 a 變為 [2, 3]
// 所以 a == 1 為 true
// 同理 a == 2 和 a == 3 都為 true
23
// 答案:0
// 考察陣列的 filter 方法
// filter() 方法創建一個新陣列,其包含通過所提供函式實作的測驗的所有元素,
// filter 為陣列中的每個元素呼叫一次傳入的回呼函式,
// 并利用所有使得回呼函式回傳 true 或等價于 true 的值的元素創建一個新陣列,
// 回呼函式只會在已經賦值的索引上被呼叫,對于那些已經被洗掉或者從未被賦值的索引不會被呼叫,
var arr = [0, 1];
arr[5] = 5; // 直接為索引 5 的元素賦值為 5,跳過的幾個元素均為 'empty',這些索引不會觸發回呼函式
var newArr = arr.filter((x) => {
return x === undefined;
}); // 所以這里沒有元素等于 undefined
console.log(newArr.length); // 輸出 0
24
// 答案:aaa
// 考察運算子優先級和強制型別轉換
// 優先級:函式呼叫 > ! > + > 三元運算子
//
const value = "https://www.cnblogs.com/bidong/archive/2022/09/06/value is" + !!Number(["0"]) ? "aaa" : "bbb";
console.log(value);
// Number('0') => 0
// !0 觸發型別轉換 => true,這些值會被轉換成 false:null、NaN、0、空字串 ("" or '' or ``)、undefined
// !true => false
// 'value is' + false => 'value isfalse'
// 條件運算子觸發型別轉換 => 'value isfalse' 轉換為 true
// 最終輸出 aaa
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/505338.html
標籤:其他
下一篇:HTML核心標簽和屬性
