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)




12.如何解決AJAX跨域問題?
在服務(wù)器端使用代理訪問
XRH2已經(jīng)支持跨域訪問
jQuery設(shè)置數(shù)據(jù)類型為JSONP
13.JS閉包?
閉包是指有權(quán)限訪問另一個函數(shù)作用域的變量的函數(shù)。
14.Node的特點(diǎn)?
- 它是一個javascript運(yùn)行環(huán)境
- 依賴于Chrome V8引擎進(jìn)行代碼解釋
- 事件驅(qū)動
- 非阻塞I/O
- 輕量、可伸縮,適于實(shí)時數(shù)據(jù)交互應(yīng)用
- 單進(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)生一個副本