關(guān)于JavaScript必學(xué)的基礎(chǔ)知識(shí)(上)
看來(lái)看看這些關(guān)于JavaScript基礎(chǔ)知識(shí)你都掌握了嗎?
1. ‘&&’運(yùn)算符能做什么?
&& 運(yùn)算符,也稱為邏輯與,計(jì)算操作數(shù)并返回它遇到的第一個(gè)假表達(dá)式。 如果沒(méi)有找到錯(cuò)誤的表達(dá)式,它會(huì)返回最后一個(gè)真實(shí)的表達(dá)式。 它采用短路來(lái)防止不必要的工作。
使用 if 語(yǔ)句。
使用 && 運(yùn)算符。
2.||可以做什么呢?
|| 運(yùn)算符,也稱為邏輯或,計(jì)算操作數(shù)并返回它遇到的第一個(gè)真值表達(dá)式。 它還使用短路來(lái)防止不必要的工作。 在ES6引入默認(rèn)函數(shù)參數(shù)之前,它被用來(lái)初始化函數(shù)中的默認(rèn)參數(shù)值。
3.? undefined 和 null 有什么區(qū)別?
在了解 undefined 和 null 的區(qū)別之前,我們先來(lái)看看它們的相同點(diǎn)。
它們都屬于 JavaScript 中的 7 種基本類型。
它們被認(rèn)為是假值,這意味著當(dāng)使用 Boolean(value) 或 !!value 轉(zhuǎn)換為布爾值時(shí),它們的值為假。
現(xiàn)在,讓我們看看它們的區(qū)別。
undefined 是未指定特定值的變量或未顯式返回值的函數(shù)的默認(rèn)值,例如 console.log(1),以及對(duì)象中不存在的屬性,JS 引擎為其分配未定義的值。
null 是一個(gè)值,表示沒(méi)有任何值。 nullis 顯式分配給變量。 在此示例中,當(dāng) fs.readFile 方法未拋出錯(cuò)誤時(shí),我們將獲得一個(gè)空值。
比較 null 和 undefined 時(shí),使用 == 時(shí)得到 true,使用 === 時(shí)得到 false。
4.什么是事件傳播?
當(dāng)一個(gè)事件發(fā)生在 DOM 元素上時(shí),它不僅僅發(fā)生在那個(gè)特定的元素上。 在“冒泡階段”期間,事件冒泡或傳播到其父級(jí)、祖父母、曾祖父母或父級(jí),直到到達(dá)窗口。
另一方面,在“捕獲階段”期間,事件從窗口開(kāi)始在元素上觸發(fā),并向下傳播到事件目標(biāo)或 event.target。
事件傳播分為三個(gè)階段:
捕獲階段:事件從窗口開(kāi)始,然后向下傳播到每個(gè)元素,直到到達(dá)目標(biāo)元素。
目標(biāo)階段:事件已經(jīng)到達(dá)目標(biāo)元素。
冒泡階段:事件從目標(biāo)元素冒泡,然后上升到每個(gè)元素,直到到達(dá)窗口。
5.什么是事件冒泡?
當(dāng)一個(gè)事件發(fā)生在 DOM 元素上時(shí),它不僅僅發(fā)生在那個(gè)特定的元素上。 在冒泡階段,事件冒泡,或者事件發(fā)生在它的父級(jí)、祖父母、曾祖父母等上,直到它到達(dá)窗口。
HTML:
JS:
addEventListener 方法有第三個(gè)可選參數(shù),稱為 useCapture,默認(rèn)為 false。 如果設(shè)置為true,事件將發(fā)生在捕獲階段而不是冒泡階段。 如果點(diǎn)擊子元素,它會(huì)在控制臺(tái)上分別記錄child、parent、grandparent、html、document、window。 這就是事件冒泡。
6.什么是事件捕捉?
當(dāng)一個(gè)事件發(fā)生在 DOM 元素上時(shí),它不僅僅發(fā)生在那個(gè)特定的元素上。 在捕獲階段,事件從窗口開(kāi)始,一直向下傳播到觸發(fā)事件的元素。
HTML:
JS:
addEventListener 方法有第三個(gè)可選參數(shù),稱為 useCapture,默認(rèn)為 false。 如果設(shè)置為true,事件將發(fā)生在捕獲階段而不是冒泡階段。 如果你點(diǎn)擊子元素,它會(huì)在控制臺(tái)上分別記錄window、document、html、grandparent和parent。 這就是事件捕獲。
7. event.preventDefault() 和 event.stopPropagation() 方法有什么區(qū)別?
event.preventDefault() 方法防止元素的默認(rèn)行為。 如果在表單元素中使用,它會(huì)阻止提交。 如果在錨元素內(nèi)使用,它會(huì)阻止導(dǎo)航。 如果在上下文菜單中使用,它會(huì)阻止其顯示或出現(xiàn)。
另一方面,event.stopPropagation() 方法用于防止在捕獲和冒泡階段進(jìn)一步傳播當(dāng)前事件。
8. 如何確定元素中是否使用了 event.preventDefault() 方法?
我們可以在事件對(duì)象中使用 event.defaultPrevented 屬性。 它返回一個(gè)布爾值,指示是否已在特定元素內(nèi)調(diào)用 event.preventDefault()。
9. 為什么代碼 obj.someprop.x 會(huì)拋出錯(cuò)誤?
顯然,代碼會(huì)拋出錯(cuò)誤,因?yàn)槲覀冊(cè)噲D訪問(wèn)對(duì)象中不存在的屬性“someprop”中的屬性“x”。 它導(dǎo)致未定義的值。
請(qǐng)記住,訪問(wèn)對(duì)象本身或其原型中不存在的屬性默認(rèn)為未定義。 由于 undefined 沒(méi)有屬性“x”,因此嘗試訪問(wèn)它會(huì)導(dǎo)致錯(cuò)誤。
10.什么是event.target?
簡(jiǎn)單的說(shuō),event.target就是事件發(fā)生的元素或者觸發(fā)事件的元素。
HTML:
JS:
如果你點(diǎn)擊一個(gè)按鈕,即使我們將事件附加到最外層的 div,它仍然會(huì)打印按鈕標(biāo)簽。 因此,我們可以得出結(jié)論,event.target 是觸發(fā)事件的元素。
11.什么是event.currentTarget?
event.currentTarget 是我們明確附加事件處理程序的元素。
HTML:
JS:
如果你點(diǎn)擊了一個(gè)按鈕,即使你點(diǎn)擊了那個(gè)按鈕,它仍然會(huì)打印最外層的div標(biāo)簽。 在此示例中,我們可以得出結(jié)論,event.currentTarget 是事件處理程序附加到的元素。
12. 為什么在 JavaScript 中比較兩個(gè)相似的對(duì)象會(huì)返回 false?
讓我們從以下示例開(kāi)始:
JavaScript 以不同的方式比較對(duì)象和原始類型。 在基本類型中,JavaScript 根據(jù)它們的值來(lái)比較它們,而在對(duì)象中,JavaScript 根據(jù)它們的引用或變量存儲(chǔ)在內(nèi)存中的地址來(lái)比較它們。
這就是為什么第一個(gè) console.log 語(yǔ)句返回 false,而第二個(gè) console.log 語(yǔ)句返回 true。 a 和 c 具有相同的引用地址,而 a 和 b 則不同。
13. 如何計(jì)算一行中多個(gè)表達(dá)式的值?
您可以使用逗號(hào)運(yùn)算符在一行中計(jì)算多個(gè)表達(dá)式的值。 它從左到右計(jì)算表達(dá)式并返回最右邊的項(xiàng)或最后一個(gè)操作數(shù)的值。
上面的結(jié)果最終得到x的值為27,首先我們將x的值自增6,然后調(diào)用addFive(6)函數(shù),將6作為參數(shù)傳給x,結(jié)果x為11 。
然后,我們將 x 的當(dāng)前值乘以 2 并將其賦值給 x,將 x 的值更新為 22。
然后,我們將 x 的當(dāng)前值減去 5,并將結(jié)果賦給 x,從而使 x 更新為 17。
最后,我們遞增 x 乘以 10 并將更新后的值賦回給 x,導(dǎo)致 x 的最終值為 27。
14.什么是作用域?
JavaScript 中的作用域是指變量或函數(shù)可訪問(wèn)的區(qū)域。 JavaScript 具有三種作用域:全局作用域、函數(shù)作用域和塊作用域 (ES6)。
全局范圍:在全局命名空間中聲明的變量或函數(shù)駐留在全局范圍內(nèi),使它們可以從代碼中的任何位置訪問(wèn)。
函數(shù)范圍:在函數(shù)內(nèi)聲明的變量、函數(shù)和參數(shù)可在函數(shù)本身內(nèi)訪問(wèn),但不能在函數(shù)外訪問(wèn)。
塊作用域:在塊 {} 內(nèi)聲明的變量(使用 let 或 const)只能在該塊內(nèi)訪問(wèn)。
范圍也指一組查找變量的規(guī)則。 如果在當(dāng)前范圍內(nèi)沒(méi)有找到一個(gè)變量,它會(huì)在外部范圍內(nèi)搜索,如果在外部范圍內(nèi)沒(méi)有找到該變量,它將繼續(xù)搜索,直到到達(dá)全局范圍。 如果找到變量,就可以使用; 否則,將拋出錯(cuò)誤。 這個(gè)搜索變量的過(guò)程也稱為作用域鏈。
15. JavaScript 中的假值是什么?
簡(jiǎn)而言之,假值是在轉(zhuǎn)換為布爾值時(shí)變?yōu)榧俚闹怠?/span>
要檢查一個(gè)值是否為假,您可以使用布爾函數(shù)或 !! 操作員。