2021年最經(jīng)典JavaScript面試題

2021年精選JavaScript面試題:web前端工程師(js) | 智一面

1.介紹js的基本數(shù)據(jù)類型

Undefined渠牲、Null听盖、Boolean、Number瀑踢、String

2.有哪些內(nèi)置對(duì)象?

數(shù)據(jù)封裝類對(duì)象:Object擂啥、Array哄陶、Boolean、Number 和 String

其他對(duì)象:Function哺壶、Arguments屋吨、Math、Date山宾、RegExp至扰、Error

3.this對(duì)象的理解

this總是指向函數(shù)的直接調(diào)用者(而非間接調(diào)用者);

如果有new關(guān)鍵字,this指向new出來的那個(gè)對(duì)象;

在事件中塌碌,this指向觸發(fā)這個(gè)事件的對(duì)象渊胸,特殊的是,IE中的attachEvent中的this總是指向全局對(duì)象Window;

4.eval是做什么的?

它的功能是把對(duì)應(yīng)的字符串解析成JS代碼并運(yùn)行;

應(yīng)該避免使用eval台妆,不安全翎猛,非常耗性能(2次,一次解析成js語句接剩,一次執(zhí)行)切厘。

由JSON字符串轉(zhuǎn)換為JSON對(duì)象的時(shí)候可以用eval,var obj =eval(‘(‘+ str +’)’);

5.DOM怎樣添加懊缺、移除疫稿、移動(dòng)培他、復(fù)制、創(chuàng)建和查找節(jié)點(diǎn)

// 創(chuàng)建新節(jié)點(diǎn)

createDocumentFragment() //創(chuàng)建一個(gè)DOM片段

createElement() //創(chuàng)建一個(gè)具體的元素

createTextNode() //創(chuàng)建一個(gè)文本節(jié)點(diǎn)

// 添加遗座、移除舀凛、替換、插入

appendChild()

removeChild()

replaceChild()

insertBefore() //在已有的子節(jié)點(diǎn)前插入一個(gè)新的子節(jié)點(diǎn)

// 查找

getElementsByTagName() //通過標(biāo)簽名稱

getElementsByName() //通過元素的Name屬性的值(IE容錯(cuò)能力較強(qiáng)途蒋,會(huì)得到一個(gè)數(shù)組猛遍,其中包括id等于name值的)

getElementById() //通過元素Id,唯一性

6.null和undefined的區(qū)別?

null是一個(gè)表示”無”的對(duì)象号坡,轉(zhuǎn)為數(shù)值時(shí)為0;undefined是一個(gè)表示”無”的原始值懊烤,轉(zhuǎn)為數(shù)值時(shí)為NaN。

undefined:

(1)變量被聲明了宽堆,但沒有賦值時(shí)腌紧,就等于undefined。

(2) 調(diào)用函數(shù)時(shí)畜隶,應(yīng)該提供的參數(shù)沒有提供壁肋,該參數(shù)等于undefined。

(3)對(duì)象沒有賦值的屬性代箭,該屬性的值為undefined墩划。

(4)函數(shù)沒有返回值時(shí)涕刚,默認(rèn)返回undefined嗡综。

null:

(1) 作為函數(shù)的參數(shù),表示該函數(shù)的參數(shù)不是對(duì)象杜漠。

(2) 作為對(duì)象原型鏈的終點(diǎn)极景。

7.new操作符具體干了什么呢?

(1)創(chuàng)建一個(gè)空對(duì)象,并且 this 變量引用該對(duì)象驾茴,同時(shí)還繼承了該函數(shù)的原型盼樟。

(2)屬性和方法被加入到 this 引用的對(duì)象中。

(3)新創(chuàng)建的對(duì)象由 this 所引用锈至,并且最后隱式的返回 this 晨缴。

8.JSON 的了解?

JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。它是基于JavaScript的一個(gè)子集峡捡。數(shù)據(jù)格式簡單, 易于讀寫, 占用帶寬小击碗。

格式:采用鍵值對(duì),例如:{‘a(chǎn)ge’:’12’, ‘name’:’back’}

9.call() 和 apply() 的區(qū)別和作用?

apply()函數(shù)有兩個(gè)參數(shù):第一個(gè)參數(shù)是上下文们拙,第二個(gè)參數(shù)是參數(shù)組成的數(shù)組稍途。如果上下文是null,則使用全局對(duì)象代替砚婆。

如:function.apply(this,[1,2,3]);

call()的第一個(gè)參數(shù)是上下文械拍,后續(xù)是實(shí)例傳入的參數(shù)序列。

如:function.call(this,1,2,3);

10.如何獲取UA?

function whatBrowser() {

? ? ?document.Browser.Name.value=navigator.appName;

? ? ?document.Browser.Version.value=navigator.appVersion;

? ? ?document.Browser.Code.value=navigator.appCodeName;

? ? ?document.Browser.Agent.value=navigator.userAgent;

?}

11.解釋 JavaScript 中的相等性。

JavaScript 中有嚴(yán)格比較和類型轉(zhuǎn)換比較:

嚴(yán)格比較(例如 ===)在不允許強(qiáng)制轉(zhuǎn)型的情況下檢查兩個(gè)值是否相等坷虑;

抽象比較(例如 ==)在允許強(qiáng)制轉(zhuǎn)型的情況下檢查兩個(gè)值是否相等甲馋。

var a = "42";

var b = 42;

a == b; // true

a === b; // false

一些簡單的規(guī)則:

如果被比較的任何一個(gè)值可能是 true 或 false,要用 ===迄损,而不是 ==摔刁;

如果被比較的任何一個(gè)值是這些特定值(0、“”或 [])海蔽,要用 ===共屈,而不是 ==;

在其他情況下党窜,可以安全地使用 ==拗引。它不僅安全,而且在很多情況下幌衣,它可以簡化代碼矾削,并且提升代碼可讀性。

12.解釋 JavaScript 中的值和類型豁护。

JavaScript提供兩種數(shù)據(jù)類型: 基本數(shù)據(jù)類型和引用數(shù)據(jù)類型

基本數(shù)據(jù)類型有:

String

Number

Boolean

Null

Undefined

Symbol

引用數(shù)據(jù)類型有:

Object

Array

Function

13.解釋事件冒泡以及如何阻止它哼凯?

事件冒泡是指嵌套最深的元素觸發(fā)一個(gè)事件,然后這個(gè)事件順著嵌套順序在父元素上觸發(fā)楚里。

防止事件冒泡的一種方法是使用 event.cancelBubble 或 event.stopPropagation()(低于 IE 9)断部。

14.JavaScript 中的 let 關(guān)鍵字有什么用?

除了可以在函數(shù)級(jí)別聲明變量之外班缎,ES6 還允許你使用 let 關(guān)鍵字在代碼塊({..})中聲明變量蝴光。

15.Javascript 中的“閉包”是什么?舉個(gè)例子达址?

閉包是在另一個(gè)函數(shù)(稱為父函數(shù))中定義的函數(shù)蔑祟,并且可以訪問在父函數(shù)作用域中聲明和定義的變量。

閉包可以訪問三個(gè)作用域中的變量:

在自己作用域中聲明的變量沉唠;

在父函數(shù)中聲明的變量疆虚;

在全局作用域中聲明的變量。

var globalVar = "abc";

// 自調(diào)用函數(shù)

(function outerFunction (outerArg) { // outerFunction 作用域開始

// 在 outerFunction 函數(shù)作用域中聲明的變量

var outerFuncVar = 'x';

// 閉包自調(diào)用函數(shù)

(function innerFunction (innerArg) { // innerFunction 作用域開始

// 在 innerFunction 函數(shù)作用域中聲明的變量

var innerFuncVar = "y";

console.log(

"outerArg = " + outerArg + "

" +

"outerFuncVar = " + outerFuncVar + "

" +

"innerArg = " + innerArg + "

" +

"innerFuncVar = " + innerFuncVar + "

" +

"globalVar = " + globalVar);

// innerFunction 作用域結(jié)束

})(5); // 將 5 作為參數(shù)

// outerFunction 作用域結(jié)束

})(7); // 將 7 作為參數(shù)

innerFunction 是在 outerFunction 中定義的閉包满葛,可以訪問在 outerFunction 作用域內(nèi)聲明和定義的所有變量径簿。除此之外,閉包還可以訪問在全局命名空間中聲明的變量纱扭。

上述代碼的輸出將是:

outerArg = 7

outerFuncVar = x

innerArg = 5

innerFuncVar = y

globalVar = abc

16.如何在 JavaScript 中創(chuàng)建私有變量牍帚?

要在 JavaScript 中創(chuàng)建無法被修改的私有變量,你需要將其創(chuàng)建為函數(shù)中的局部變量乳蛾。即使這個(gè)函數(shù)被調(diào)用暗赶,也無法在函數(shù)之外訪問這個(gè)變量鄙币。例如:

function func() {

var priv = "secret code";

}

console.log(priv); // throws error

要訪問這個(gè)變量,需要?jiǎng)?chuàng)建一個(gè)返回私有變量的輔助函數(shù)蹂随。

function func() {

var priv = "secret code";

return function() {

return priv;

}

}

var getPriv = func();

console.log(getPriv()); // => secret code

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末十嘿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子岳锁,更是在濱河造成了極大的恐慌绩衷,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件激率,死亡現(xiàn)場(chǎng)離奇詭異咳燕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)乒躺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門招盲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嘉冒,你說我怎么就攤上這事曹货。” “怎么了讳推?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵顶籽,是天一觀的道長。 經(jīng)常有香客問我银觅,道長礼饱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任设拟,我火速辦了婚禮慨仿,結(jié)果婚禮上久脯,老公的妹妹穿的比我還像新娘纳胧。我一直安慰自己,他們只是感情好帘撰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布跑慕。 她就那樣靜靜地躺著,像睡著了一般摧找。 火紅的嫁衣襯著肌膚如雪核行。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天蹬耘,我揣著相機(jī)與錄音芝雪,去河邊找鬼。 笑死综苔,一個(gè)胖子當(dāng)著我的面吹牛惩系,可吹牛的內(nèi)容都是我干的位岔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼堡牡,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼抒抬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起晤柄,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤擦剑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后芥颈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惠勒,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年爬坑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捉撮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡妇垢,死狀恐怖巾遭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情闯估,我是刑警寧澤灼舍,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站涨薪,受9級(jí)特大地震影響骑素,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜刚夺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一献丑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧侠姑,春花似錦创橄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至安吁,卻和暖如春醉蚁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鬼店。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國打工网棍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人妇智。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓滥玷,卻偏偏與公主長得像捌锭,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子罗捎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 根據(jù) Stack Overflow 的 2018 年度調(diào)查桨菜,JavaScript 連續(xù)六年成為最常用的編程語言豁状。所...
    HelloJames閱讀 59,047評(píng)論 0 24
  • 題目 題目如上,這道題的經(jīng)典之處在于它綜合考察了面試者的JavaScript的綜合能力倒得,包含了變量定義提升泻红、thi...
    庸者的救贖閱讀 2,228評(píng)論 12 27
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭霞掺,有人歡樂有人憂愁谊路,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,536評(píng)論 28 53
  • 信任包括信任自己和信任他人 很多時(shí)候菩彬,很多事情缠劝,失敗、遺憾骗灶、錯(cuò)過惨恭,源于不自信,不信任他人 覺得自己做不成耙旦,別人做不...
    吳氵晃閱讀 6,190評(píng)論 4 8
  • 步驟:發(fā)微博01-導(dǎo)航欄內(nèi)容 -> 發(fā)微博02-自定義TextView -> 發(fā)微博03-完善TextView和...
    dibadalu閱讀 3,138評(píng)論 1 3