1.JavaScript概述(js是什么北戏?)
?JavaScript是一種基于對象的克滴,事件驅(qū)動的疾嗅,跨平臺的珠十,客戶端腳本語言
?基于對象、事件驅(qū)動荠诬、跨平臺琅翻、客戶端腳本、弱類型浅妆、解釋性(編程)語言
2.運(yùn)算符的優(yōu)先級
()自增自減(單目)算數(shù)運(yùn)算符關(guān)系運(yùn)算符邏輯運(yùn)算符三目運(yùn)算賦值
3.js的三大結(jié)構(gòu)
順序結(jié)構(gòu)條件結(jié)構(gòu)循環(huán)結(jié)構(gòu)
Case的穿透特性望迎。
4.?break、continue凌外、return的區(qū)別
break多用于switch語句辩尊,防止case的穿透特性,執(zhí)行完語句直接退出循環(huán),不在向后執(zhí)行康辑。
continue只會退出本次循環(huán)摄欲,不執(zhí)行后面代碼,但循環(huán)會繼續(xù)疮薇。
return用在函數(shù)返回值中胸墙,用了return退出函數(shù),不執(zhí)行后面代碼按咒,如果函數(shù)沒有返回值是undefined迟隅。
5.?什么是作業(yè)域鏈
當(dāng)訪問一個(gè)變量時(shí),先在當(dāng)前作用域找励七,如果找不到時(shí)在向父級的作用域找智袭,在找不到在向上級的作用域找,最后找到window如果沒有這個(gè)變量時(shí)掠抬,程序報(bào)錯(cuò)吼野。
6.函數(shù)的好處
1.函數(shù)實(shí)現(xiàn)一段功能的封裝,增加了代碼的復(fù)用性两波,一次封裝多次使用瞳步;
2.函數(shù)讓變量私有化闷哆,避免命名空間的污染;
3.通過參數(shù)的傳遞单起,可以實(shí)現(xiàn)功能的多元化抱怔;
7.什么是形參什么是實(shí)參
形參:函數(shù)聲明時(shí)定義的形式參數(shù),沒有具體的值嘀倒,用來傳遞參數(shù)野蝇。
實(shí)參:一個(gè)有具體的值的參數(shù),可以理解為一個(gè)變量括儒,做為參數(shù)傳遞時(shí)就叫實(shí)參
8.什么是函數(shù)的變量提升
當(dāng)程序執(zhí)行時(shí)會分為預(yù)解析和解析兩個(gè)過程,在預(yù)解析的過程中會把所有的var聲明和函數(shù)聲明提升到當(dāng)前作用域的最開頭锐想,進(jìn)行一個(gè)聲明不賦值的操作帮寻,如果是函數(shù)把整個(gè)函數(shù)提升到開頭,如果是匿名函數(shù)賦值給了變量赠摇,提升的是變量固逗,如果var聲明和函數(shù)名沖突了,優(yōu)先保留函數(shù)藕帜。
9.事件和函數(shù)的關(guān)系
事件三要素:
? ? 事件源烫罩,事件,事件處理程序
關(guān)系:事件依賴于函數(shù)實(shí)現(xiàn)
10.怎么訪問對象
訪問對象的兩種方式:1.對象·鍵名直接調(diào)用洽故。2.對象【“鍵”】調(diào)用
方法二注意贝攒,如果鍵是一個(gè)變量不用雙引號,且如果鍵是只能方法二調(diào)用时甚,如果是一個(gè)函數(shù)在【】后面還要加一個(gè)小括號隘弊。
11.改變數(shù)組的方法有那些
增:push加到最后、unshift加到最開頭荒适。返回的是改變的新數(shù)組的長度梨熙。
刪:pop刪除最后一個(gè),shift刪除第一個(gè)刀诬。返回的是刪除的元素咽扇。
拷貝:splice(a,b陕壹,c)傳0以上质欲,0個(gè)參數(shù)拷貝數(shù)組,1個(gè)參數(shù)重下標(biāo)位置開始拷貝帐要,2個(gè)參數(shù)重a拷貝到b把敞,3個(gè)以上參數(shù)從a拷貝到b并且把后面的數(shù)插入數(shù)組。返回新數(shù)組榨惠。
Reverse:數(shù)組倒序輸出奋早。
12.什么是堆什么是棧
棧:當(dāng)變量聲明時(shí)會在內(nèi)存中開辟一片空間盛霎,如果是基本數(shù)據(jù)類型開辟的是棧空間耽装,每聲明一次開辟一次愤炸,一個(gè)變量等于另一個(gè)變量時(shí)又開辟了一片空間,一個(gè)值變另一個(gè)不會變掉奄,瀏覽器清除棧原則:先進(jìn)后出即先聲明最后清除规个。
堆:當(dāng)聲明的是引用數(shù)據(jù)類型時(shí),開辟一個(gè)堆空間姓建,變量存的是一個(gè)指向?qū)?yīng)堆空間的地址诞仓,當(dāng)多個(gè)變量重復(fù)聲明時(shí)都值向一個(gè)堆,如果有一個(gè)變量的值變了速兔,即堆空間中的值變了墅拭,所有指向這個(gè)地址的值都會變。
13.splice和concat的區(qū)別
Splice合并數(shù)組時(shí)涣狗,傳入的值可以是數(shù)組谍婉,合并成二維數(shù)組,而concat傳入的值如果是一個(gè)數(shù)組镀钓,會取出一個(gè)一個(gè)元素合并穗熬。
14.什么是內(nèi)置對象,舉例說明丁溅。
Js內(nèi)部封裝的可以直接調(diào)用的系統(tǒng)內(nèi)部的對象就是內(nèi)置對象唤蔗,比如時(shí)間對象,數(shù)字對象唧瘾。
15.什么是bom模型和dom模型
bom模型就是html在瀏覽器端運(yùn)行生成的對象模型措译,子對象是window,window下的子對象是document饰序、history领虹、location、screen求豫、navigator塌衰。
Dom模型其實(shí)就是html文檔樹,html由head蝠嘉、body組成最疆。
16.什么是事件對象
對元素的某種操作就是事件,當(dāng)觸發(fā)事件時(shí)生成的對象就是事件對象蚤告,
17.attributes怎么用
Attribute可以設(shè)置自定義屬性努酸,也可以獲取自定義的屬性,也可以移除自定義的屬性杜恰,getattribute獲取的是一個(gè)對應(yīng)屬性的集合获诈。Attributes獲取的是對應(yīng)節(jié)點(diǎn)的所有屬性節(jié)點(diǎn)仍源。
18.什么是事件
當(dāng)某個(gè)事件執(zhí)行時(shí),從子元素向父元素觸發(fā)或從父元素向子元素觸發(fā)稱為事件流舔涎,事件流分為:事件冒泡和事件捕獲笼踩。
19.事件監(jiān)聽的好處
1. 可以為一個(gè)元素綁定多次同一個(gè)事件
2. 程序員可以使用事件監(jiān)聽方式確定觸發(fā)的事件過程是冒泡還是捕獲
20.委托的好處和缺點(diǎn):
委托的機(jī)制:利用事件冒泡實(shí)現(xiàn)
優(yōu)點(diǎn):1.把某個(gè)事件加到父元素上,提高程序的執(zhí)行效率
2.動態(tài)創(chuàng)建的元素亡嫌,可以在創(chuàng)建元素的函數(shù)體外部為其添加事件
3.減少內(nèi)存資源的消耗嚎于。
缺點(diǎn):1.只觸發(fā)target目標(biāo)節(jié)點(diǎn),其它子節(jié)點(diǎn)不觸發(fā)
2.層級關(guān)系太遠(yuǎn)容易造成事件誤判挟冠。
21.this的指向
一于购、自定義函數(shù)中:1.this指向window。
2.如果自定義函數(shù)在對象中知染,this指向直屬對象价涝。
3.如果在嚴(yán)格模式下,this是undefined持舆。
二、事件綁定中伪窖,this指向事件源逸寓,即綁定這個(gè)事件的元素對象。
三覆山、箭頭函數(shù)中的this 來源于函數(shù)聲明時(shí)所在的上下文環(huán)境(繼承)
四竹伸、定時(shí)器中回調(diào)函數(shù)中的this指向window
五、this指向改變的方法: blind()簇宽,call()勋篓,apply()
?blind可以在所有的匿名函數(shù)(不包括箭頭函數(shù))中使用
call和apply可以在非匿名函數(shù)和匿名函數(shù)后調(diào)用執(zhí)行,但用于匿名函數(shù)時(shí)函數(shù)會立即執(zhí)行魏割。函數(shù)的實(shí)參會通過call的參數(shù)一個(gè)一個(gè)進(jìn)行傳參譬嚣,
而apply會在第二個(gè)參數(shù)以數(shù)組的方式進(jìn)行傳參。
22.正則的量詞有哪些
+:1個(gè)或多個(gè)钞它。
*:0個(gè)或多個(gè)拜银。
?:1個(gè)或0個(gè)遭垛。
{a尼桶,b}:a到b個(gè)。
23.什么是嚴(yán)格模式是什么锯仪,有哪些好處
嚴(yán)格模式就語法相對于嚴(yán)格的一種模式泵督,把“use strict”放到程序的最開頭就是嚴(yán)格模式的聲明,聲明后下面就是嚴(yán)格模式的作用域庶喜。
好處:1.代碼更規(guī)范整潔小腊,可讀性高救鲤。
2.程序效率更高
24.let關(guān)鍵字的特點(diǎn)
1:不允許重復(fù)聲明變量
2:作用域范圍內(nèi)沒有變量提升,所以關(guān)鍵字上方為暫時(shí)性死區(qū)溢豆。
3:會生成塊級作用域蜒简,故可以在for循環(huán)時(shí)聲明私有化變量。
25.結(jié)構(gòu)賦值的好處
1.可以一次性定義多個(gè)變量
2.可以讓一個(gè)函數(shù)返回多個(gè)值
3.可以作用在函數(shù)的傳參上漩仙,以對象的方式傳遞搓茬,可以無視參數(shù)的順序但形參與對象的鍵名要一致。
4.可以輕松實(shí)現(xiàn)兩個(gè)數(shù)的交換
26.什么是連綴調(diào)用
當(dāng)一個(gè)對象調(diào)用多個(gè)方法的時(shí)候队他,把它們連接起來調(diào)用就是連綴調(diào)用卷仑。
27.怎么解決定時(shí)器私有問題
把定時(shí)器賦值給一個(gè)私有變量即可,比如對象.變量名麸折,這個(gè)定時(shí)器就是私有的锡凝。
28.什么是對象和面向?qū)ο?/b>
對象是一個(gè)整體,具有屬性和方法的事物垢啼,對象也可以動態(tài)添加屬性和方法窜锯。
面向?qū)ο笫且环N高級的編程思想,是為了滿足不同的人的不同需求的功能而產(chǎn)生的芭析,這種思想就是把任何事物抽象成一個(gè)對象來對待锚扎,之后再對這個(gè)對象進(jìn)行相關(guān)的操作,實(shí)現(xiàn)相關(guān)需求的編程思想就是面向?qū)ο竽倨簦嫦驅(qū)ο罂梢宰審?fù)雜的編程簡單化驾孔,面向?qū)ο缶哂蟹庋b、繼承惯疙、多態(tài)的特點(diǎn)翠勉。
29.new做了哪些事
1.底層自動創(chuàng)建了一個(gè)對象
2.使得構(gòu)造函數(shù)中的this指向了實(shí)例對象
3.在實(shí)例對象中產(chǎn)生一個(gè)__proto__指針(是一個(gè)屬性),這個(gè)指針指向構(gòu)造函數(shù)的原型對象。使得實(shí)例對象能夠訪問原型對象下的屬性和方法霉颠。
30.怎么創(chuàng)建和調(diào)用原型對象
創(chuàng)建:1.用class創(chuàng)建類時(shí)对碌,在內(nèi)部直接創(chuàng)建的對象就是原型對象。
2.用new關(guān)鍵字對象時(shí)蒿偎,在對象的prototype屬性下創(chuàng)建的對象俭缓。
調(diào)用:只有在創(chuàng)建對象時(shí)內(nèi)部可以直接調(diào)用,對象外部無法訪問原型對象酥郭。
31.什么是實(shí)例屬性
創(chuàng)建構(gòu)造函數(shù)時(shí)實(shí)例化的屬性就是實(shí)例屬性
32.使用時(shí)間對象有哪些需要注意的
1.date.getYear是從1900年開始計(jì)算的华坦。
2.獲取的月是0-11月。
3.獲取的星期是0-6.
4.獲取的時(shí)間毫秒數(shù)是從1970年1月1日0時(shí)0分0秒開始計(jì)算
33.get和post的區(qū)別
1不从,參數(shù)傳遞的方式
get放在url
post放在請求體中
2,參數(shù)大小(由瀏覽器決定)
get后攜帶的參數(shù)大小,考慮瀏覽器的兼容性惜姐,一般在2k
post理論上沒有限制,tomcat可修改
3,安全性post比get要高。
4,請求速度
get比post快
5,post請求時(shí)歹袁,要先設(shè)置一個(gè)請求頭坷衍。get不需要
34.Ajax優(yōu)缺點(diǎn)
缺點(diǎn):
1.安全性不高
2.破壞了瀏覽器的機(jī)制
3.不利于瀏覽器搜索引擎的搜索
4.破壞了程序的異常機(jī)制,不利于程序維護(hù)
5.容易形成回調(diào)地獄,程序的可讀性不高条舔。
6.xhr不同的瀏覽器支持程序不同枫耳,所以在兼容性上有一定的不足。
優(yōu)點(diǎn):按需取數(shù)據(jù)孟抗,頁面無刷新迁杨。減少帶寬,降級開發(fā)成本凄硼。
請求速度快铅协。提升用戶體驗(yàn)。
35.如何實(shí)現(xiàn)跨域(偏后臺)
jsonp
xhr2 : cors
服務(wù)器代理
iframe
document.domain
36.原型鏈
原型鏈:實(shí)例對象中會自動生成__proto__指針摊沉,這個(gè)指針指向構(gòu)造函數(shù)的原型對象狐史,構(gòu)造函數(shù)的原型對象下還會有一個(gè)__proto__指向,這個(gè)指針指向父類的原型對象说墨,各個(gè)指向間形成的鏈條關(guān)系骏全。
37.Ajax原理
[if !supportLists]1.?[endif]實(shí)例化一個(gè)實(shí)例化對象xhr?=?new?XMLHttpRequest();
兼容ie6xhr?=?new?ActiveXObject("Microsoft.XMLHTTP");
[if !supportLists]2.?[endif]xhr.open(obj.method,obj.url);調(diào)用open傳方法和地址
[if !supportLists]3.?[endif]xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");如果是post請求要設(shè)置以上請求頭
xhr.send(data);數(shù)據(jù)傳data里
[if !supportLists]4.?[endif]xhr.onreadystatechange
監(jiān)聽請求是否成功
38.Cookie的特點(diǎn)
1.cookie是保存在電腦硬盤上的一個(gè)文件,內(nèi)容是一個(gè)字符串
2.Cookie是面向路徑的尼斧。缺省路徑 (path) 屬性時(shí)吟温,Web 服務(wù)器頁會自動傳遞當(dāng)前路徑給瀏覽器,指定路徑強(qiáng)制服務(wù)器使用設(shè)置的路徑
3.在一個(gè)目錄頁面里設(shè)置的 Cookie 在另一個(gè)目錄的頁面里是看不到的?
4.cookie存儲數(shù)據(jù)不安全
5.cookie存儲數(shù)據(jù)不能超過4kb 最多不能超過50條
39.關(guān)于ajax緩存問題
Ajax緩存問題是因?yàn)榘l(fā)送的請求地址一樣時(shí)突颊,會用本地緩存的數(shù)據(jù),這時(shí)潘悼,我們要的是重新獲取律秃,解決方法,在地址后面跟一個(gè)時(shí)間戳
40.什么是閉包治唤,優(yōu)缺點(diǎn)
閉包的概念:
???有權(quán)訪問另一個(gè)函數(shù)中私有變量的函數(shù)棒动,
??1,函數(shù)套函數(shù)
??2宾添,一個(gè)函數(shù)訪問了另一個(gè)函數(shù)中的變量
??注意:一般是將一個(gè)函數(shù)作為另一個(gè)函數(shù)的返回值來執(zhí)行
閉包的好處
??變量私有化船惨,避免命名空間的污染
??可以訪問其它函數(shù)的私有變量
閉包的缺點(diǎn)
??耗費(fèi)資源,有可能會造成內(nèi)存溢出缕陕。
41.繼承的幾種方式
1.普通繼承
2.call繼承?:?目的是為了改變父類的this指向
3.apply繼承?:?目的是為了改變父類的this指向
4.原型式(原型鏈):原理==將父類的實(shí)例對象賦值給子類的原型對象
5.組合繼承
????//原型式+call/apply
6.寄生組合繼承粱锐。