溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JavaScript常見面試題和答案

發(fā)布時(shí)間:2020-06-24 09:12:43 來源:億速云 閱讀:653 作者:Leah 欄目:web開發(fā)

這篇文章將為大家詳細(xì)講解有關(guān)JavaScript常見面試題和答案,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

問題1:Java和JavaScript有什么不同

JavaJavaScript
Java是一種OOP編程語言。JavaScript是一種OOP腳本語言。
它創(chuàng)建在虛擬機(jī)或?yàn)g覽器中運(yùn)行的應(yīng)用程序。代碼在瀏覽器或node環(huán)境上運(yùn)行。
需要編譯Java代碼。JS代碼都是文本的形式。

問題2:什么 Javascript

JavaScript 是一種輕量級(jí)的解釋型編程語言,具有面向?qū)ο蟮奶匦裕试S各位在其他靜態(tài)HTML頁面中構(gòu)建交互性。 該語言的通用核心已嵌入Netscape,Internet Explorer和其他Web瀏覽器中。

問題3: JS 支持哪些數(shù)據(jù)類型

JavaScript常見面試題和答案

JS 支持的數(shù)據(jù)類型:

 ● Undefined

 ● Null

 ● Boolean

 ● String

 ● Symbol

 ● Number

 ● Object

問題4:JavaScript的特性是什么

JavaScript常見面試題和答案

以下是JS的特性:

 ● JS 是一種輕量級(jí),解釋性編程語言。

 ● 為了創(chuàng)建以網(wǎng)絡(luò)為中心的應(yīng)用程序而設(shè)計(jì)。

 ● 補(bǔ)充和集成了 Java

 ● 補(bǔ)充和集成了 HTML

 ● 開放和跨平臺(tái)

問題5:JavaScript是區(qū)分大小寫

是的,JS是一種區(qū)分大小寫的語言。關(guān)鍵字、變量、函數(shù)名和任何其他標(biāo)識(shí)符必須始終使用一致的大寫字母進(jìn)行使用。

問題6:JS 的優(yōu)勢(shì)是什么

以下使用JS的優(yōu)點(diǎn):

 ● 更少的服務(wù)器交互 - 在將頁面發(fā)送到服務(wù)器之前,可以驗(yàn)證用戶輸入,節(jié)省了服務(wù)器流量,意味著服務(wù)器的負(fù)載更少

 ● 立即反饋 - 用戶不需要等待頁面重新加載來查看是否忘記輸入某些內(nèi)容。

 ● 增強(qiáng)交互 - 在界面中,當(dāng)用戶使用鼠標(biāo)懸?;蛲ㄟ^鍵盤激活它們時(shí)會(huì)做出響應(yīng)。

 ● 豐富的接口 - 可以使用JS包含拖放組件和滑塊等項(xiàng),為網(wǎng)站提供豐富的界面。

問題7:如何用JS創(chuàng)建對(duì)象

JS賊支持對(duì)象概念,用如下方式創(chuàng)建即可:

var emp = {
name: "Daniel",
age: 23
};

問題8:如何用JS創(chuàng)建數(shù)組

JS 創(chuàng)建數(shù)組也很簡(jiǎn)單:

var x = [];
var y = [1, 2, 3, 4, 5];

問題9:JS 中的命名函數(shù)是什么以及如何定義:

命名函數(shù)在定義后立即聲明名稱,可以使用function關(guān)鍵字定義:

function named(){
// write code here
}

問題10:是否可以將匿名函數(shù)分配給變量并將其作為參數(shù)傳遞給另一個(gè)函數(shù)

可以。一個(gè)匿名函數(shù)可以分配給一個(gè)變量,它也可以作為參數(shù)傳遞給另一個(gè)函數(shù)。

問題11:JS中的參數(shù)對(duì)象是什么&如何獲得傳遞給函數(shù)的參數(shù)類型

JS 變量arguments表示傳遞給函數(shù)的參數(shù)。 使用typeof運(yùn)算符,可以獲得傳遞給函數(shù)的參數(shù)類型。如下:

function func(x){
console.log(typeof x, arguments.length);
}
func(); //==> "undefined", 0
func(7); //==> "number", 1
func("1", "2", "3"); //==> "string", 3

問題12:JS中變量的作用域是什么

變量的作用域是程序中定義它的區(qū)域,JS變量只有兩個(gè)作用域:

 ● 全局變量 - 全局變量具有全局作用域,這意味著它在JS代碼中的任何位置都可見。

 ● 局部變量 - 局部變量?jī)H在定義它的函數(shù)中可見,函數(shù)參數(shù)始終是該函數(shù)的本地參數(shù)。

問題13:JS 中“this”運(yùn)算符的用途是什么?

this關(guān)鍵字引用它所屬的對(duì)象。 根據(jù)使用位置,它具有不同的值。 在方法中,這指的是所有者對(duì)象,而在函數(shù)中,這指的是全局對(duì)象。

問題14:什么是回調(diào)

回調(diào)函數(shù)是作為參數(shù)或選項(xiàng)傳遞給某個(gè)方法的普通JS函數(shù)。它是一個(gè)函數(shù),在另一個(gè)函數(shù)完成執(zhí)行后執(zhí)行,因此稱為回調(diào)。在JS中,函數(shù)是對(duì)象,因此,函數(shù)可以接受函數(shù)作為參數(shù),并且可以由其他函數(shù)返回。

問題15:什么是閉包?舉個(gè)例子

只要在某個(gè)內(nèi)部作用域內(nèi)訪問在當(dāng)前作用域之外定義的變量,就會(huì)創(chuàng)建閉包。 它允許你從內(nèi)部函數(shù)訪問外部函數(shù)的作用域。 在JS中,每次創(chuàng)建函數(shù)時(shí)都會(huì)創(chuàng)建閉包。 要使用閉包,只需在另一個(gè)函數(shù)內(nèi)定義一個(gè)函數(shù)并暴露它。

問題16:列出一些內(nèi)置方法及其返回的值。

內(nèi)置方法返回值
CharAt()它返回指定索引處的字符。
Concat()它連接兩個(gè)或多個(gè)字符串。
forEach()它為數(shù)組中的每個(gè)元素調(diào)用一個(gè)函數(shù)。
indexOf()它返回指定值第一次出現(xiàn)時(shí)調(diào)用字符串對(duì)象中的索引。
pop()它從數(shù)組中刪除最后一個(gè)元素并返回該元素。
push()它將一個(gè)或多個(gè)元素添加到數(shù)組的末尾,并返回?cái)?shù)組的新長(zhǎng)度。
reverse()反轉(zhuǎn)數(shù)組元素的順序。

問題17: JS中的變量命名約定是什么?

在JS中命名變量時(shí)要遵循以下規(guī)則:

  1. 咱們不應(yīng)該使用任何JS保留關(guān)鍵字作為變量名。例如,breakboolean變量名無效。
  2. JS 變量名不應(yīng)該以數(shù)字(0-9)開頭。它們必須以字母或下劃線開頭。例如,123name是一個(gè)無效的變量名,但123namename123是一個(gè)有效的變量名。
  3. JS 變量名區(qū)分大小寫。例如,Testtest是兩個(gè)不同的變量。

問題18:TypeOf 運(yùn)算符是如何工作的

typeof運(yùn)算符用于獲取其操作數(shù)的數(shù)據(jù)類型。 操作數(shù)可以是文字或數(shù)據(jù)結(jié)構(gòu),例如變量,函數(shù)或?qū)ο蟆?它是一個(gè)一元運(yùn)算符,放在它的單個(gè)操作數(shù)之前,可以是任何類型。 它的值是一個(gè)字符串,表示操作數(shù)的數(shù)據(jù)類型。

問題19:如何使用 JS 創(chuàng)建 cookie

創(chuàng)建cookie的最簡(jiǎn)單方法是為document.cookie對(duì)象分配一個(gè)字符串值,如下所示:

document.cookie = "key1 = value1; key2 = value2; expires = date";

問題20:如何使用JS讀取cookie

讀取cookie就像寫入cookie一樣簡(jiǎn)單,因?yàn)?code>document.cookie對(duì)象的值是cookie。

 ● document.cookie的值是由分號(hào)分隔的name=value對(duì)的列表,其中name是cookie的名稱,value是其字符串值。

 ● 可以使用split()方法將字符串分解為鍵和值。

問題21:如何使用 JS 刪除 cookie

如果要?jiǎng)h除cookie以便后續(xù)嘗試讀取cookie,則只需將過期日期設(shè)置為過去的時(shí)間。 咱們應(yīng)該定義cookie路徑以確保刪除正確的cookie。 如果未指定路徑,某些瀏覽器將不允許咱們刪除cookie。

問題22:Attribute 和Property之間有什么區(qū)別

 ● Attribute——提供關(guān)于元素的更多細(xì)節(jié),如id、類型、值等。

 ● Property —— 分配給屬性的值,如type =“text”,value ='Name'等。

問題23:列出在JS代碼中訪問HTML元素的不同方式

下面是在JS代碼中訪問 html 元素的方法列表:

 ● getElementById(‘idname’): 按id名稱獲取元素

 ● getElementsByClass(‘classname’): 獲取具有給定類名的所有元素

 ● getElementsByTagName(‘tagname’): 獲取具有給定標(biāo)記名稱的所有元素

 ● querySelector(): 此函數(shù)采用css樣式選擇器并返回第一個(gè)選定元素

問題24:JS代碼在HTML文件中可以以多少種方式使用

主要有三種:

 ● 行內(nèi)

 ● 內(nèi)部

 ● 外部

行內(nèi)方式:

...
<input type="button" value="點(diǎn)擊有驚喜" onclick="javascript:alert('哈哈哈哈')">
...

內(nèi)部方式:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script type="text/javascript">
//聲明一個(gè)函數(shù)(整個(gè)文檔都可以使用)
function surprise() {
alert('恭喜你中了一百萬')/*彈出框*/
}
</script>
</head>
。。。
</html>

外部方式:

...
<!--很多html頁面都可以調(diào)用js4.js頁面-->
<script src="../../js/js4.js" type="text/javascript" charset="utf-8">
...

問題25:在JS中定義變量的方法有哪些

在 JS 中聲明變量有三種方式:

 ● varvar 語句用于聲明一個(gè)變量,咱們可以選擇初始化該變量的值。例子:var a =10;變量聲明在代碼執(zhí)行之前處理。

 ● const - 常量的值不能通過重新賦值來改變,并且不能重新聲明。

 ● let - 語句聲明一個(gè)塊級(jí)作用域的本地變量,并且可選的將其初始化為一個(gè)值。

問題26:什么是類型化語言

類型化語言中,值與值關(guān)聯(lián),而不是與變量關(guān)聯(lián),它有兩種類型:

  • 動(dòng)態(tài):在這種情況下,變量可以包含多種類型,如在JS中,變量可以取number, string 類型。
  • 靜態(tài):在這種情況下,變量只能包含一種類型,就像在Java中聲明為string的變量只能包含一組字符,不能包含其他類型。

問題27:Cookie 與 Local storage 與 Session storage 區(qū)別

特性CookielocalStoragesessionStorage
數(shù)據(jù)的生命期一般由服務(wù)器生成,可設(shè)置失效時(shí)間。如果在瀏覽器端生成Cookie,默認(rèn)是關(guān)閉瀏覽器后失效除非被清除,否則永久保存僅在當(dāng)前會(huì)話下有效,關(guān)閉頁面或?yàn)g覽器后被清除
存放數(shù)據(jù)大小4K左右一般為 5MB
與服務(wù)器端通信每次都會(huì)攜帶在HTTP頭中,如果使用cookie保存過多數(shù)據(jù)會(huì)帶來性能問題僅在客戶端(即瀏覽器)中保存,不參與和服務(wù)器的通信
易用性需要程序員自己封裝,源生的Cookie接口不友好需要程序員自己封裝,源生的Cookie接口不友好    源生接口可以接受,亦可再次封裝來對(duì)Object和Array有更好的支持

問題28:  ‘==‘ 和 ‘===‘ 區(qū)別

==: 兩邊值類型不同的時(shí)候,要先進(jìn)行類型轉(zhuǎn)換,再比較。
===:不做類型轉(zhuǎn)換,類型不同的一定不等。

一言以蔽之:==先轉(zhuǎn)換類型再比較,===先判斷類型,如果不是同一類型直接為false。

問題29:null 和 undefined 區(qū)別

undefined是基本數(shù)據(jù)類型 表示未定義 缺少的意思。

null是引用數(shù)據(jù)類型,是對(duì)象,表示空對(duì)象

undefined是從null派生出來的  所以undefined==nulltrue

問題 30:undeclared 和 undefined 區(qū)別?

undeclared的變量是程序中不存在且未聲明的變量。 如果程序嘗試讀取未聲明變量的值,則會(huì)遇到運(yùn)行時(shí)錯(cuò)誤。undefined的變量是在程序中聲明但未賦予任何值的變量,如果程序試圖讀取未定義變量的值,則返回undefined的值。

問題 31: 列出一些JS框架

JavaScript常見面試題和答案

JS框架是用JavaScript編寫的應(yīng)用程序框架,它與控制流中的JS庫不同,一些最常用的框架是:

 ● Vue

 ● Angular

 ● React

問題 32: window 與 document 的區(qū)別:

window:JS 的 window 是一個(gè)全局對(duì)象,它包含變量、函數(shù)、historylocation。

document:document也位于window之下,可以視為window的屬性。

問題 33: innerHTML 和 innerText 的區(qū)別

innerHTML:也就是從對(duì)象的起始位置到終止位置的全部?jī)?nèi)容,包括Html標(biāo)簽。

innerText:從起始位置到終止位置的內(nèi)容, 但它去除Html標(biāo)簽

問題 34:JS中的事件冒泡是什么

事件冒泡是HTML DOM API中事件傳播的一種方式,當(dāng)一個(gè)事件發(fā)生在另一個(gè)元素中的一個(gè)元素中,并且兩個(gè)元素都注冊(cè)了該事件的句柄時(shí)。通過冒泡,事件首先由最內(nèi)部的元素捕獲和處理,然后傳播到外部元素。執(zhí)行從該事件開始,并轉(zhuǎn)到其父元素。然后執(zhí)行傳遞給父元素,以此類推,直到body元素。

問題 35:NaN 是什么

NaN 即非數(shù)值(Not a Number),NaN 屬性用于引用特殊的非數(shù)字值,該屬性指定的并不是不合法的數(shù)字。

NaN 屬性 與 Number.Nan 屬性相同。

提示: 請(qǐng)使用 isNaN() 來判斷一個(gè)值是否是數(shù)字。原因是 NaN 與所有值都不相等,包括它自己。

問題 36:JS的原始/對(duì)象類型如何在函數(shù)中傳遞?

兩者之間的一個(gè)區(qū)別是,原始數(shù)據(jù)類型是通過值傳遞的,對(duì)象是通過引用傳遞的。

 ● 值傳遞:意味著創(chuàng)建原始文件的副本。把它想象成一對(duì)雙胞胎:他們出生的時(shí)候一模一樣,但是雙胞胎中的老大在戰(zhàn)爭(zhēng)中失去了一條腿,而老二卻沒有。

 ● 引用傳遞: 意味著創(chuàng)建原始文件的別名。當(dāng)我媽媽叫沙雕的時(shí)候,雖然我的名字叫小智,但這并不是說我就突然就克隆了一個(gè)自己:我仍然是我,只是可以用不同名字來稱呼我而已。

問題 37:如何在JS中將任意基的字符串轉(zhuǎn)換為整數(shù)

parseInt(string, radix)   將一個(gè)字符串 string 轉(zhuǎn)換為 radix 進(jìn)制的整數(shù), radix 為介于2-36之間的數(shù),如下:

parseInt("4F", 16)

問題 38:2+5+ '3'的結(jié)果是什么

由于25是整數(shù),它們將以數(shù)字形式相加。因?yàn)?code>3是一個(gè)字符串,它將與 7 拼接,結(jié)果是73。

問題 39:export 和 import 是什么

importexport有助于咱們編寫模塊化JS代碼。 使用importexport,咱們可以將代碼拆分為多個(gè)文件,如下:

//------ lib.js ------</span>
export const sqrt = Math.sqrt;</span>
export function square(x) {</span>
return x * x;</span>
}
export function diag(x, y) {
return sqrt(square(x) + square(y));
}
 
//------ main.js ------</span>
 { square, diag } from 'lib';
console.log(square(5)); // 25
console.log(diag(4, 3)); // 5

問題40:JS中的“嚴(yán)格”模式是什么以及如何啟用?

嚴(yán)格模式是在代碼中引入更好的錯(cuò)誤檢查的一種方法。

 ● 當(dāng)使用嚴(yán)格模式時(shí),不能使用隱式聲明的變量,或?yàn)橹蛔x屬性賦值,或向不可擴(kuò)展的對(duì)象添加屬性。

 ● 可以通過在文件,程序或函數(shù)的開頭添加“use strict”來啟用嚴(yán)格模式

問題41:JS 中的 prompt 框是什么

提示框是允許用戶通過提供文本框輸入輸入的框。 prompt() 方法顯示一個(gè)對(duì)話框,提示訪問者輸入。 如果您希望用戶在輸入頁面之前輸入值,則通常會(huì)使用提示框。 彈出提示框時(shí),用戶必須在輸入輸入值后單擊“確定”或“取消”才能繼續(xù)。

問題42:下面代碼的輸出是什么?

var Y = 1;
if (eval(function f(){}))
{
  y += typeof F;
}
console.log(y);

打印1undefined。if條件語句使用eval求值,因此eval(function f(){})返回函數(shù)f(){}(為真)。因此,在if語句中,執(zhí)行typeof f返回undefined,因?yàn)?code>if語句代碼在運(yùn)行時(shí)執(zhí)行,而if條件中的語句在運(yùn)行時(shí)計(jì)算。

問題43:call 和 apply有什么區(qū)別

callapply可以用來重新定義函數(shù)的執(zhí)行環(huán)境,也就是this的指向;callapply都是為了改變某個(gè)函數(shù)運(yùn)行時(shí)的context,即上下文而存在的,換句話說,就是為了改變函數(shù)體內(nèi)部this的指向。

call()調(diào)用一個(gè)對(duì)象的方法,用另一個(gè)對(duì)象替換當(dāng)前對(duì)象,可以繼承另外一個(gè)對(duì)象的屬性,它的語法是:

Function.call(obj[, param1[, param2[, [,...paramN]]]]);

說明:call方法可以用來代替另一個(gè)對(duì)象調(diào)用一個(gè)方法,call方法可以將一個(gè)函數(shù)的對(duì)象上下文從初始的上下文改變?yōu)?code>obj指定的新對(duì)象,如果沒有提供obj參數(shù),那么Global對(duì)象被用于obj

apply()call()方法一樣,只是參數(shù)列表不同,語法:

Function.apply(obj[, argArray]);

說明:如果argArray不是一個(gè)有效數(shù)組或不是arguments對(duì)象,那么將導(dǎo)致一個(gè)TypeError,如果沒有提供argArrayobj任何一個(gè)參數(shù),那么Global對(duì)象將用作obj。

問題44:如何在JS中清空數(shù)組

有許多方法可以用來清空數(shù)組:

方法一:

arrayList = []

上面的代碼將把變量arrayList設(shè)置為一個(gè)新的空數(shù)組。如果在其他任何地方都沒有對(duì)原始數(shù)組arrayList的引用,則建議這樣做,因?yàn)樗鼘?shí)際上會(huì)創(chuàng)建一個(gè)新的空數(shù)組。咱們應(yīng)該小心使用這種清空數(shù)組的方法,因?yàn)槿绻銖牧硪粋€(gè)變量引用了這個(gè)數(shù)組,那么原始的引用數(shù)組將保持不變。

方法二:

arrayList.length = 0;

上面的代碼將通過將其length設(shè)置為0來清除現(xiàn)有數(shù)組。這種清空數(shù)組的方式還會(huì)更新指向原始數(shù)組的所有引用變量。 因此,當(dāng)你想要更新指向arrayList的所有引用變量時(shí),此方法很有用。

方法三:

arrayList.splice(0, arrayList.length);

這處方法也行,當(dāng)然這種清空數(shù)組的方法也將更新對(duì)原始數(shù)組的所有引用。

方法四:

while(arrayList.length)
{
  arrayList.pop();
}

上面的實(shí)現(xiàn)也可以空數(shù)組,但通常不建議經(jīng)常使用這種方式。

問題45:以下代碼的輸出什么

var output = (function(x)
{
  delete x;
  return x;
}
)(0);
console.log(output);

打印 0。delete操作符用于從對(duì)象中刪除屬性。這里x不是一個(gè)對(duì)象,而是一個(gè)局部變量,刪除操作符不影響局部變量。

問題46:以下代碼的輸出什么

var X = { foo : 1}; 
var output = (function() 
{ 
  delete X.foo; 
  return X.foo; 
} 
)(); 
console.log(output);

輸出 undefined。delete操作符用于刪除對(duì)象的屬性。X是一個(gè)具有foo屬性的對(duì)象,由于它是一個(gè)自調(diào)用函數(shù),所以咱們將從對(duì)象X中刪除foo屬性。這樣做之后,當(dāng)咱們?cè)噲D引用一個(gè)被刪除的foo屬性時(shí),結(jié)果是undefined。

問題47:以下代碼的輸出什么

var foo = function Bar()
{
  return 7;
};
typeof Bar();

輸出將是引用錯(cuò)誤。函數(shù)定義只能有一個(gè)引用變量作為其函數(shù)名。

問題49:為什么要將JS源文件的全部?jī)?nèi)容包裝在一個(gè)函數(shù)中

這是一種越來越普遍的做法,被許多流行的JS庫所采用。 這種技術(shù)圍繞文件的整個(gè)內(nèi)容創(chuàng)建一個(gè)閉包,最重要的是,它可以創(chuàng)建一個(gè)私有命名空間,從而有助于避免不同JS模塊和庫之間潛在的名稱沖突。

該技術(shù)的另一個(gè)特性是允許為全局變量提供一個(gè)簡(jiǎn)單的別名,這在jQuery插件中經(jīng)常使用。

問題50:JS中的轉(zhuǎn)義字符是什么

JS轉(zhuǎn)義字符使咱們能夠在不破壞應(yīng)用程序的情況下編寫特殊字符。轉(zhuǎn)義字符(\)用于處理特殊字符,如單引號(hào)、雙引號(hào)、撇號(hào)和&號(hào),在字符前放置反斜杠使其顯示。

如:document.write("I am a \"good\" boy")

關(guān)于JavaScript常見面試題和答案就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI