摘要:由于第一個循環中的變量是使用關鍵字聲明的,因此該值是全局的。檢查對象是否具有對內存中相同位置的引用。在事件傳播期間,有三個階段捕獲,目標和冒泡。當我們傳遞參數時,這與變量的不同。
1.下面代碼的輸出是什么?
for (var i = 0; i < 3; i++) { setTimeout(() => console.log(i), 1); } for (let i = 0; i < 3; i++) { setTimeout(() => console.log(i), 1); }
答案:
由于JavaScript中的事件執行機制,setTimeout函數真正被執行時,循環已經走完。
由于第一個循環中的變量i是使用var關鍵字聲明的,因此該值是全局的。 在循環期間,我們每次使用一元運算符++都會將i的值增加1。
因此在第一個例子中,當調用setTimeout函數時,i已經被賦值為3。
在第二個循環中,使用let關鍵字聲明變量i:使用let(和const)關鍵字聲明的變量是具有塊作用域的(塊是{}之間的任何東西)。
在每次迭代期間,i將被創建為一個新值,并且每個值都會存在于循環內的塊級作用域。
2.下面代碼的輸出是什么?
const shape = { radius: 10, diameter() { return this.radius * 2 }, perimeter: () => 2 * Math.PI * this.radius }; shape.diameter(); shape.perimeter();
請注意,diameter是普通函數,而perimeter是箭頭函數。
對于箭頭函數,this關鍵字指向是它所在上下文(定義時的位置)的環境,與普通函數不同!
這意味著當我們調用perimeter時,它不是指向shape對象,而是指其定義時的環境(window)。沒有值radius屬性,返回undefined。
3.下面代碼的輸出是什么?
+true; !"Lydia";
一元加號會嘗試將boolean類型轉換為數字類型。 true被轉換為1,false被轉換為0。字符串"Lydia"是一個真值。 我們實際上要問的是“這個真值是假的嗎?”。 這會返回false。
4.下面代碼的輸出是什么?
function checkAge(data) { if (data === { age: 18 }) { console.log("You are an adult!"); } else if (data == { age: 18 }) { console.log("You are still an adult."); } else { console.log(`Hmm.. You don"t have an age I guess`); } } checkAge({ age: 18 });
在比較相等性,原始類型通過它們的值進行比較,而對象通過它們的引用進行比較。JavaScript檢查對象是否具有對內存中相同位置的引用。
我們作為參數傳遞的對象和我們用于檢查相等性的對象在內存中位于不同位置,所以它們的引用是不同的。 這就是為什么{ age: 18 } ===
{ age: 18 }和 { age: 18 } == { age: 18 } 返回 false的原因。
5.下面代碼的輸出是什么?
function getAge(...args) { console.log(typeof args); } getAge(21);
擴展運算符(... args)返回一個帶參數的數組。 數組是一個對象,因此typeof args返回object
6.下面代碼的輸出是什么?
const obj = { 1: "a", 2: "b", 3: "c" }; const set = new Set([1, 2, 3, 4, 5]); obj.hasOwnProperty("1"); obj.hasOwnProperty(1); set.has("1"); set.has(1);
所有對象鍵(不包括Symbols)都會被存儲為字符串,即使你沒有給定字符串類型的鍵。
這就是為什么obj.hasOwnProperty("1")也返回true。 上面的說法不適用于Set。
在我們的Set中沒有“1”:set.has("1")返回false。 它有數字類型1,set.has(1)返回true。
7.下面代碼的輸出是什么?
for (let i = 1; i < 5; i++) { if (i === 3) continue; console.log(i); }
如果某個條件返回true,則continue語句跳過迭代。
8.下面代碼的輸出是什么?
const a = {}; const b = { key: "b" }; const c = { key: "c" }; a[b] = 123; a[c] = 456; console.log(a[b]);
對象鍵自動轉換為字符串。我們試圖將一個對象設置為對象a的鍵,其值為123。 但是,當對象自動轉換為字符串化時,它變成了[Object
object]。 所以我們在這里說的是a["Object object"] = 123。 然后,我們可以嘗試再次做同樣的事情。
c對象同樣會發生隱式類型轉換。那么,a["Object object"] = 456。 然后,我們打印a[b],它實際上是a["Object
object"]。 我們將其設置為456,因此返回456。
9.下面代碼的輸出是什么?
Click here!
如果我們單擊p,我們會看到兩個日志:p和div。在事件傳播期間,有三個階段:捕獲,目標和冒泡。
默認情況下,事件處理程序在冒泡階段執行(除非您將useCapture設置為true)。 它從最深的嵌套元素向外延伸。
10.下面這些值哪些是假值?
0; new Number(0); (""); (" "); new Boolean(false); undefined;
JavaScript中只有6個假值:undefined null NaN 0 "" (empty string) false
函數構造函數,如new Number和new
Boolean都是真值。
11.下面代碼的輸出是什么?
(() => { let x, y; try { throw new Error(); } catch (x) { (x = 1), (y = 2); console.log(x); } console.log(x); console.log(y); })();
catch塊接收參數x。當我們傳遞參數時,這與變量的x不同。這個變量x是屬于catch作用域的。
之后,我們將這個塊級作用域的變量設置為1,并設置變量y的值。 現在,我們打印塊級作用域的變量x,它等于1。
在catch塊之外,x仍然是undefined,而y是2。
當我們想在catch塊之外的console.log(x)時,它返回undefined,而y返回2。
12.setInterval方法的返回值什么?
setInterval(() => console.log("Hi"), 1000);
它返回一個唯一的id。 此id可用于使用clearInterval()函數清除該定時器
13.下面代碼的輸出是什么?
[..."Lydia"];
字符串是可迭代的。 擴展運算符將迭代的每個字符映射到一個元素。 ["L", "y", "d", "i", "a"]
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104772.html
摘要:如何考察一個人是不是經驗豐富我們需要在問答式的面試中,對其項目經驗進行挖掘。如何設置筆試題現在網上有大量的面經的存在,對于我們面試是一個巨大的挑戰。尊重應聘者我們要尊重每一個來應聘的人,不要輕視別人,或者故意刁難別人。 時光荏苒,2個月前,我才剛總結了如何應對面試官,現在的我開始總結如何面試別人了。笑哭.png 1.我們需要什么樣的人 招聘肯定要有標準,這樣我們才能更快的找到我們需要的...
摘要:后續前端筆試題面試題記錄下小結我想說的是在找工作期間,肯定有自己發揮不好,或者不會的問題,一定要在晚上的時候自己再學習總結一下,在一個問題上面盡量不要栽倒兩次,學到了的才是自己的。 前言 過完元宵,就到上海找了波工作,現在已經入職好了,蹭波熱點,寫一波面試記錄,內容包含筆試題和面試題,還有一些沒有寫進來,準備再開一篇,許久沒寫了,寫的確實有些慢。如果喜歡的話可以點波贊,或者關注一下,希...
摘要:后續前端筆試題面試題記錄下小結我想說的是在找工作期間,肯定有自己發揮不好,或者不會的問題,一定要在晚上的時候自己再學習總結一下,在一個問題上面盡量不要栽倒兩次,學到了的才是自己的。 前言 過完元宵,就到上海找了波工作,現在已經入職好了,蹭波熱點,寫一波面試記錄,內容包含筆試題和面試題,還有一些沒有寫進來,準備再開一篇,許久沒寫了,寫的確實有些慢。如果喜歡的話可以點波贊,或者關注一下,希...
閱讀 1702·2021-11-18 10:02
閱讀 2218·2021-11-15 11:38
閱讀 2666·2019-08-30 15:52
閱讀 2190·2019-08-29 14:04
閱讀 3231·2019-08-29 12:29
閱讀 2086·2019-08-26 11:44
閱讀 994·2019-08-26 10:28
閱讀 830·2019-08-23 18:37