前端面試知識點(diǎn)(2)——前端基礎(chǔ)JS

1.JS的基本數(shù)據(jù)類型?

6種:undefined,null,string,number,boolean,object

2.JS引用類型?(內(nèi)置對象)

基本包裝類型:Boolean、Number、String
單體內(nèi)置對象:Global、Math
其他:Object、Array、Date、RegExp、Function

3.this關(guān)鍵字的理解?

this始終指向函數(shù)的直接調(diào)用對象或者事件的觸發(fā)對象。
如果有new關(guān)鍵字,this指的是new產(chǎn)生的對象。

4.eval是做什么的?

eval用以把字符串解析成js代碼并執(zhí)行,它既不安全也很耗費(fèi)資源。
由JSON字符串解析成JSON對象的時候可以用eval。
用JSON.parse()來代替

5.什么是JSON?

JSON是一個輕量的數(shù)據(jù)交換格式,它的格式是鍵值對,它是JS的子集。

6.new操作符到底干了什么呢?

(1)創(chuàng)建一個空對象,并且 this 變量引用該對象,同時還繼承了該函數(shù)的原型。
(2)屬性和方法被加入到 this 引用的對象中。
(3)新創(chuàng)建的對象由 this 所引用,并且最后隱式的返回 this 。

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

null表示"沒有對象",即該處不應(yīng)該有值。(對象原型鏈的終點(diǎn))
undefined表示"缺少值",就是此處應(yīng)該有一個值,但是還沒有定義。(比如沒有賦值的變量和沒有提供的參數(shù))

8.什么是原型鏈?

對象和原型都有原型,依次遞推,形成原型鏈。

9.執(zhí)行環(huán)境和作用域?

每個執(zhí)行環(huán)境都有一個變量對象,環(huán)境中定義的所有變量和函數(shù)都會保存在這個對象中。
每個函數(shù)都有自己的執(zhí)行環(huán)境,當(dāng)執(zhí)行流進(jìn)入一個函數(shù)時,函數(shù)的環(huán)境就會被推入一個環(huán)境棧之中。
作用域鏈,保證對執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)的有序訪問,小的執(zhí)行環(huán)境的變量對象在作用域鏈的前端,全局執(zhí)行環(huán)境的變量對象始終在作用域鏈的末尾。

10.JS操作cookie?

寫入Cookie:
document.cookie = " 關(guān)鍵字 = 值 [ ; expires = 有效日期 ] [;...]"
讀取Cookie:
document.cookie
刪除Cookie:
document.cookie = " 關(guān)鍵字 = ; expires = 當(dāng)前日期"

11.JS實(shí)現(xiàn)AJAX?

XMLRequestHttp對象
var request = new XMLHttpRequest(); //實(shí)例化一個XRH對象

open(method,url,async)
setRequestHead()
send(string)

ajax示例
readyState屬性
監(jiān)聽readyState屬性
響應(yīng)數(shù)據(jù)

12.如何解決AJAX跨域問題?

在服務(wù)器端使用代理訪問
XRH2已經(jīng)支持跨域訪問
jQuery設(shè)置數(shù)據(jù)類型為JSONP

13.JS閉包?

閉包是指有權(quán)限訪問另一個函數(shù)作用域的變量的函數(shù)。

14.Node的特點(diǎn)?

  1. 它是一個javascript運(yùn)行環(huán)境
  2. 依賴于Chrome V8引擎進(jìn)行代碼解釋
  3. 事件驅(qū)動
  4. 非阻塞I/O
  5. 輕量、可伸縮,適于實(shí)時數(shù)據(jù)交互應(yīng)用
  6. 單進(jìn)程,單線程
    適合運(yùn)用在高并發(fā)、I/O密集

15.阻止事件冒泡和默認(rèn)事件?

事件觸發(fā)的順序是由里而外的
event.target判斷來進(jìn)行阻止;e.stopPropagation()也可以阻止
e.preventDefault()阻止默認(rèn)事件

16.事件委托?

事件委托就是利用事件冒泡,只指定一個事件處理程序,就可以管理某一類型的所有事件。將事件委托到父元素上。
好處:提高性能,不用挨個添加事件;新添加的dom也有事件。

17.call和apply?

obj.call(thisObj, arg1, arg2, ...);
obj.apply(thisObj, [arg1, arg2, ...]);
兩者作用一致,都是把obj(即this)綁定到thisObj,這時候thisObj具備了obj的屬性和方法。
唯一區(qū)別是apply接受的是數(shù)組參數(shù),call接受的是連續(xù)參數(shù)。
call和apply可以用來重新定義函數(shù)的執(zhí)行環(huán)境,也就是this的指向。

18.prototype?

實(shí)例對prototype的修改,其他實(shí)例皆可使用。
創(chuàng)建一個新的實(shí)例時,實(shí)例會引用到原型,也會根據(jù)構(gòu)造函數(shù)的方法定義屬性和方法。

19.querySelector和getElementBy的區(qū)別?

querySelectorAll 返回的是一個 Static Node List,而 getElementsBy 系列的返回的是一個 Live Node List。

20.如何確定一個對象的類型?

舉例:oObj instanceof String

21.如何讓JS對象只讀?

freeze()

22.創(chuàng)建對象?

對象字面量
構(gòu)造函數(shù)
原型

問題:構(gòu)造函數(shù)不能共享方法,原型模式會共享引用類型,兩者結(jié)合最好。

23.繼承?

原型繼承
借用構(gòu)造函數(shù)

問題:原型繼承會共用引用類型,借用構(gòu)造函數(shù)不能共享方法,兩者結(jié)合最好。

24.for in與for of?

for in遍歷鍵 數(shù)組遍歷是下標(biāo)以及自定義屬性的鍵
for of遍歷值
Object.keys(obj) 返回一個數(shù)組,其中是obj對象的keys

25.其他遍歷方法?

[].forEach(function(value, index, array)
$.each([], function(index, value, array)
[].map(function(value, index, array) //map是映射,產(chǎn)生一個副本

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容