2019-07-14

整理一下js面試題

1那伐、Javascript的typeof返回值的類型有哪些

答:number、string、boolean罕邀、object畅形、function、undefined

其中Array诉探、object日熬、null的返回值類型為object

2、說出幾種顯示類型轉(zhuǎn)換和隱式類型轉(zhuǎn)換

答:顯示類型轉(zhuǎn)換:

number(將目標(biāo)轉(zhuǎn)換為數(shù)字肾胯,如果其中帶有字母則轉(zhuǎn)換為NaN逝撬;true轉(zhuǎn)換為1,false轉(zhuǎn)換為0殴玛;null轉(zhuǎn)換為0咖为;undefined轉(zhuǎn)換為NaN)。

string(將任何目標(biāo)轉(zhuǎn)換為字符串帘皿,包括true东跪、false、undefined鹰溜、null等)

parseInt(將目標(biāo)轉(zhuǎn)換為整型虽填,true、false曹动、null斋日、undefined全部轉(zhuǎn)換為NaN;將正常的數(shù)字轉(zhuǎn)換為整數(shù)墓陈,小數(shù)直接去掉恶守。注:如果parseInt中含有兩個參數(shù),含義就是以第二個參數(shù)為基底贡必,將第一個數(shù)字轉(zhuǎn)換為十進(jìn)制的數(shù)字)

boolean(將目標(biāo)轉(zhuǎn)換為true或false)

toString(將其轉(zhuǎn)換為字符串類型)

parseFloat(轉(zhuǎn)換為小時類型兔港,將第一個小數(shù)點后面的第一個數(shù)字返回,其余截斷)

3仔拟、split()和join()的區(qū)別

答:join()的作用是將數(shù)組拼接為字符串衫樊,括號中可以填寫需要的連接字符,默認(rèn)的連接字符是“利花,”科侈。(john.htlm)

split()的作用是將字符串分割,返回數(shù)組炒事。

4臀栈、數(shù)組方法.pop()、.push()挠乳、.unshift()权薯、.shift的作用

答:pop()是在尾部刪除姑躲;push()是在尾部添加;

? ? ? ?shift()是在頭部刪除崭闲;unshift()是在頭部添加肋联;

5、ajax請求時get和post方式的區(qū)別

答:get和post本質(zhì)上就是TCP連接刁俭,并無差別橄仍。http請求最初設(shè)定了八種方法,這八種方法本質(zhì)上沒有區(qū)別牍戚,只是讓請求更加語義化而已侮繁。但是由于http的規(guī)定和瀏覽器/服務(wù)器的限制,導(dǎo)致他們在應(yīng)用過程中體現(xiàn)出一些不同如孝。

1宪哩、發(fā)送機(jī)制不同

1)get請求時將參數(shù)跟在url后面進(jìn)行傳遞,而post請求是將參數(shù)作為http消息的實體內(nèi)容發(fā)送給web服務(wù)器第晰。

2)get請求提交的數(shù)據(jù)限制是1024字節(jié)锁孟,這是由于特定瀏覽器和服務(wù)器的限制,如ie的url長度限制是2083字節(jié)茁瘦,而火狐理論上沒有長度顯示品抽。注意這個限制是url的整個長度的限制,而不只是參數(shù)的長度甜熔。post理論上沒有長度限制圆恤。

3)get請求的數(shù)據(jù)會被瀏覽器緩存起來,因此其他人可以從瀏覽器的流失記錄中提取到這些數(shù)據(jù)腔稀,如賬戶名稱和密碼等等盆昙。所以get方式會帶來嚴(yán)重的安全問題,而post可以避免這些問題焊虏。

2淡喜、服務(wù)端的區(qū)別

1)客戶端使用get請求時,服務(wù)端使用Request.QueryString來獲取诵闭,而客戶端使用post請求時拆火,服務(wù)端使用Request.Form來獲取。

2)post用于創(chuàng)建資源涂圆,資源的內(nèi)容會被編入http請示的內(nèi)容中,例如币叹,處理訂貨表單等等润歉。

3)當(dāng)請求無副作用時(如進(jìn)行搜索),使用get方法颈抚,當(dāng)請求有副作用時(如添加數(shù)據(jù))踩衩,則使用post方法嚼鹉。

6、call和apply的作用是什么驱富,有什么區(qū)別

答:call和apply的作用是改變this指向锚赤,區(qū)別是傳參列表不同。

7褐鸥、什么是閉包线脚,閉包的作用是什么,使用閉包的注意點

1叫榕、什么是閉包:

JS的變量分為局部變量和全局變量浑侥,函數(shù)內(nèi)部可以讀取全局變量,但是函數(shù)外部不能讀取局部變量晰绎。任何未聲明而直接賦值的變量都會變?yōu)槿肿兞吭⒙洹R虼嗽谡G闆r下函數(shù)外部不能獲得函數(shù)內(nèi)部的局部變量,為了獲得這個局部變量荞下,可以在函數(shù)內(nèi)部再定義一個函數(shù)伶选,將此函數(shù)作為返回值,這樣在函數(shù)外部就能得到這個局部變量了尖昏。因此阿可以理解為閉包是將函數(shù)內(nèi)部和函數(shù)外部連接起來的橋梁仰税。

如果一個函數(shù)用到了它作用域外面的變量,那么這個變量和這個函數(shù)之間的環(huán)境就叫閉包会宪。

2肖卧、閉包的作用:

1)模仿塊級作用域

所謂塊級作用域就是指在循環(huán)中定義的變量,一旦循環(huán)結(jié)束掸鹅,變量也隨之銷毀塞帐,它的作用范圍只在這一小塊。而在JavaScript中沒有這樣的塊級作用域巍沙,由于JavaScript不會告訴你變量是否已經(jīng)被聲明葵姥,所以容易造成命名沖突,如果在全局環(huán)境定義的變量句携,就會污染全局環(huán)境榔幸,因此可以利用閉包的特性來模仿塊級作用域。

2)儲存變量

閉包的另一個特點是可以保存外部函數(shù)的變量矮嫉,內(nèi)部函數(shù)保留了對外部函數(shù)的活動變量的引用削咆,所以變量不會被釋放。這種寫法可以用在把一些不經(jīng)常變動計算起來又比較復(fù)雜的值保存起來蠢笋,節(jié)省每次的訪問時間拨齐。

3)封裝私有變量

我們可以把函數(shù)當(dāng)做一個范圍,函數(shù)內(nèi)部的變量就是私有變量昨寞,在外部無法引用瞻惋,但是我們可以通過閉包的特點訪問私有變量厦滤。

3、使用閉包的注意點

1)由于閉包會使得函數(shù)的變量保存在內(nèi)存中歼狼,內(nèi)存的消耗很大掏导,所以不能濫用閉包,可能會導(dǎo)致內(nèi)存泄漏羽峰。解決方法是在函數(shù)退出之前趟咆,將不適用的局部變量全部刪除。

2)閉包會在父函數(shù)外部限寞,改變父函數(shù)內(nèi)部變量的值忍啸。所以,如果你把父函數(shù)當(dāng)作對象(object)使用履植,把閉包當(dāng)作它的公用方法(Public Method)计雌,把內(nèi)部變量當(dāng)作它的私有屬性(private value),這時一定要小心玫霎,不要隨便改變父函數(shù)內(nèi)部變量的值凿滤。

8.事件委托是什么,為什么要使用事件委托

答:

1)事件委托是利用事件的冒泡原理來實現(xiàn)的庶近,何為事件冒泡呢翁脆?就是事件從最深的節(jié)點開始,然后逐步向上傳播事件鼻种,舉個例子:頁面上有這么一個節(jié)點樹反番,div>ul>li>a;比如給最里面的a加一個click點擊事件,那么這個事件就會一層一層的往外執(zhí)行叉钥,執(zhí)行順序a>li>ul>div罢缸。因此如果我們給最外面的div加點擊事件,同時點擊div內(nèi)的ul或li或a標(biāo)簽投队,都會觸發(fā)父級div上的點擊事件枫疆,這就是事件委托,委托它們父級代為執(zhí)行事件敷鸦。

2)js中性能優(yōu)化的主要思想就是減少js直接操作dom的次數(shù)息楔,這也就是為什么vue等框架使用虛擬dom的原因,因為每一次直接操作dom節(jié)點都會導(dǎo)致瀏覽器的重拍與重繪扒披,嚴(yán)重影響了瀏覽器的交互時間值依。每一個函數(shù)就是一個對象,是對象就會占用內(nèi)存碟案,對象越多占用內(nèi)存越大鳞滨,100個li就會占用100個內(nèi)存空間。如果使用事件委托蟆淀,就只對它的父級進(jìn)行操作拯啦,與dom的交互就只有一次,大大減少dom的操作次數(shù)熔任,顯著提高系統(tǒng)性能褒链。

9、簡述一下瀏覽器處理dom事件的過程疑苔,如何阻止事件冒泡

答:

dom2.0模型簡時間處理流程分為三個階段

一甫匹、事件捕獲階段:當(dāng)某個元素觸發(fā)某個事件(如:onlick),頂層對象document就會發(fā)出一個事件流惦费,隨著DOM樹的節(jié)點向目標(biāo)元素節(jié)點流去兵迅,直到達(dá)到真正發(fā)生的目標(biāo)元素。在這個過程中薪贫,事件相應(yīng)的監(jiān)聽函數(shù)是不會觸發(fā)的恍箭。

二、事件目標(biāo)階段:到達(dá)目標(biāo)元素之后瞧省,執(zhí)行目標(biāo)元素該事件的相應(yīng)處理函數(shù)扯夭。如果沒有綁定監(jiān)聽函數(shù),那就不執(zhí)行鞍匾。

三交洗、事件起泡階段:從目標(biāo)元素開始,往頂層傳播橡淑。途中如果有節(jié)點綁定了相應(yīng)的事件處理函數(shù)构拳,這些函數(shù)都會被依次觸發(fā)。

阻止事件冒泡

ie:e.cancelBubble = true

非ie:e.stopPropagation()

10梁棠、如何取消默認(rèn)事件

答:

W3Cde方法是:e.preventDefault();

IE的方法是:e.returnValue = false;

默認(rèn)事件:如a標(biāo)簽置森,具有點擊跳轉(zhuǎn)功能,button按鈕的默認(rèn)提交功能等掰茶。

11暇藏、添加節(jié)點、刪除節(jié)點濒蒋、替換節(jié)點盐碱、插入節(jié)點的方法

1)創(chuàng)建新節(jié)點:

createElement()//創(chuàng)建一個具體的元素節(jié)點

createTextNode()//創(chuàng)建一個指定文本的節(jié)點

2)操作節(jié)點

添加:appendChild()

移除:removeChild()

替換:replaceChild()

插入:insertBefore()

3)查找節(jié)點

通過標(biāo)簽名稱:getElementByTagName()

通過name屬性:getElementByName()

通過元素id(具有唯一性):getElementById()

12、簡述一下什么是ajax沪伙,如何發(fā)送一個ajax請求

答:

1)AJAX = Asynchronous JavaScript and XML瓮顽,這不是新的編程語言,而是一種使用現(xiàn)有標(biāo)準(zhǔn)的新方法围橡,它最大的優(yōu)點是在不重新加載整個頁面的情況下暖混,可以與服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁內(nèi)容。AJAX不需要任何的瀏覽器插件翁授,但需要用戶允許JavaScript在瀏覽器上執(zhí)行拣播。

2)發(fā)送ajax請求的步驟

1創(chuàng)建一個對象XMLHttpRequest

var xhr = new XMLHttpRequest();為了支持ie6以及更早的版本晾咪,要 var xhr=new ActiveXObject()

2監(jiān)聽請求成功后的狀態(tài)變化

3設(shè)置請求參數(shù)

4發(fā)起請求

5操作dom,實現(xiàn)動態(tài)局部刷新

13贮配、一個完整的http請求的步驟是什么

1谍倦、建立tcp連接

2、web瀏覽器向web服務(wù)器發(fā)送請求命令

3泪勒、web瀏覽器發(fā)送請求頭信息

4昼蛀、web服務(wù)器應(yīng)答

5、web服務(wù)器向瀏覽器發(fā)送應(yīng)答頭信息

6圆存、web服務(wù)器向瀏覽器發(fā)送數(shù)據(jù)

7叼旋、web服務(wù)器關(guān)閉tcp連接

14、解釋一下什么是jsonp沦辙,為什么不是真正的ajax

jsonp是用來解決跨域獲取數(shù)據(jù)的一種解決方案夫植,具體是通過動態(tài)創(chuàng)建script標(biāo)簽,然后通過標(biāo)簽的src屬性獲取js文件中的js腳本怕轿。該腳本的內(nèi)容是一個函數(shù)調(diào)用偷崩,參數(shù)就是服務(wù)器返回的數(shù)據(jù),為了處理這些返回的數(shù)據(jù)撞羽,需要事先在頁面定義好回調(diào)函數(shù)阐斜,本質(zhì)上使用的并不是ajax技術(shù)。

ajax的核心是:通過XmlHttpRequest獲取非本頁的內(nèi)容

jsonp的核心是:通過動態(tài)添加<script>標(biāo)簽來調(diào)用服務(wù)器提供的js腳本诀紊。

jsonp只支持get請求谒出,ajax支持get和post請求。

15邻奠、document load和document ready的區(qū)別

答:load是當(dāng)頁面所有資源全部加載完成之后(包括dom文檔樹笤喳、css文件、js文件和圖片資源等)碌宴,執(zhí)行一個函數(shù)杀狡。load方法就是onload事件,如果圖片資源較多贰镣,加載時間較長呜象,onload后等待執(zhí)行的函數(shù)需要等待教程時間,一些效果可能受到影響碑隆。

ready是當(dāng)dom文檔樹加載完成之后執(zhí)行一個函數(shù)(不包含圖片和css等)恭陡,所以會比load快。在原生js中沒有l(wèi)oad方法上煤,jquery中有$().ready(function)

16休玩、JS中"="=="和"==="有什么區(qū)別

答:

"="是賦值運算符,賦值順序是從右向左。

"=="判斷值是否相等拴疤,如果兩者類型不一樣就進(jìn)行隱式轉(zhuǎn)換永部;"==="不會進(jìn)行隱式轉(zhuǎn)換,不但判斷值是否相等呐矾,還要判斷類型是否完全相等扬舒。具體如下。

1)"=="進(jìn)行判斷時方法如下:

如果兩個值類型相等凫佛,數(shù)值相等,那么兩者相等孕惜。

如果兩個值類型不一樣愧薛,就要進(jìn)行如下轉(zhuǎn)換

1.1如果一個值是null,另一個值是undefined衫画,兩者相等毫炉。

1.2如果一個值是數(shù)字,另一個值是字符串削罩,就將字符串轉(zhuǎn)換為數(shù)字瞄勾,再將二者比較。

1.3如果一個值是true弥激,將其轉(zhuǎn)換為1进陡,進(jìn)行比較;如果一個值是false微服,將其轉(zhuǎn)換為0趾疚,進(jìn)行比較。

1.4如果一個值是對象以蕴,另一個值是數(shù)字或者字符串糙麦,將對象轉(zhuǎn)換為原始類型再進(jìn)行比較。

2)"==="具體的判斷方法如下:

2.1首先如果兩個值類型不同丛肮,他們就不相等赡磅,就不用往下看了。

2.2如果兩個值都是number類型宝与,而且值相同(NaN除外焚廊,NaN不等于任何值,NaN不等于NaN)伴鳖,那么兩者相等节值。

2.3如果兩個值都是string,兩個值在相同位置上的字符必須一致榜聂,否則不相等搞疗。

2.4如果兩個值都是boolean類型,必須同為true或false,否則不相等匿乃。

2.5如果兩個值引用的是同一個對象桩皿、數(shù)組或函數(shù),那么它們完全相同幢炸。如果引用的是不同的對象泄隔、數(shù)組或函數(shù),兩者不相等宛徊。

2.6如果兩個值同為null或undefined佛嬉,兩個相等;unll不等于undefined闸天。

17暖呕、函數(shù)聲明和函數(shù)表達(dá)式的區(qū)別

定義函數(shù)主要有三種方法:

1、函數(shù)聲明(Function Declaration);

function functionName(arg1, arg2, ...){

? ? <!-- function body -->}

2苞氮、函數(shù)表達(dá)式(Function Expression)

var variable=function(arg1, arg2, ...){

? ? ? ? ? ? <!-- function body -->}

3湾揽、new Function構(gòu)造函數(shù)

講函數(shù)聲明和函數(shù)表達(dá)式之前先說一個類似的。小伙伴們應(yīng)該都知道"變量聲明提升":主要就是三個要點:1變量聲明會提前到函數(shù)的頂部笼吟;2只有聲明被提前库物,初始化不提前(也就是賦值不提前),初始化還在原來的位置贷帮;3在初始化之前變量的值是undefined戚揭。

與"變量聲明提升"相類似,函數(shù)的聲明也會進(jìn)行提升皿桑。在js中毫目,函數(shù)聲明和函數(shù)表達(dá)式的解析順序并不一樣。由于在預(yù)編譯時函數(shù)聲明會進(jìn)行提升(函數(shù)聲明和函數(shù)體都要進(jìn)行提升)诲侮,所以函數(shù)聲明會在其他代碼執(zhí)行之前執(zhí)行镀虐,當(dāng)程執(zhí)行到函數(shù)聲明的時候直接跳過(因為預(yù)編譯的時候已經(jīng)執(zhí)行過了)。而函數(shù)表達(dá)式并不會進(jìn)行提升沟绪,只有當(dāng)程序執(zhí)行到這里時才會初始化上下文,因此如果在函數(shù)表達(dá)式之前讓這個函數(shù)執(zhí)行刮便,會導(dǎo)致瀏覽器報錯。

考點:程序中有同名函數(shù)時绽慈,由于預(yù)編譯導(dǎo)致后面的函數(shù)覆蓋前面的函數(shù)恨旱,導(dǎo)致程序執(zhí)行結(jié)果不同,分析時一定要注意坝疼;函數(shù)體內(nèi)部的變量與函數(shù)體外部的變量同名時會產(chǎn)生沖突搜贤,此時會輸入內(nèi)部變量,外部變量被屏蔽钝凶。由于函數(shù)提升定問題仪芒,導(dǎo)致打印undefined等,這是經(jīng)常考察的小知識點掂名。

原文地址:https://www.cnblogs.com/chaoyuehedy/p/9110063.html

18据沈、JavaScript的事件流模型都有什么

答:

1)捕獲流:捕獲流最早由網(wǎng)景公司開發(fā)的瀏覽器使用,當(dāng)時間發(fā)生時饺蔑,該事件由高層次向低層次傳遞锌介。

2)冒泡流:冒泡流最早由微軟公司使用,它是一種與上述捕獲流截然相反的機(jī)制猾警。當(dāng)事件發(fā)生時孔祸,該事件由低層次向高層次傳播。

3)dom中的事件流:
dom2級綜合了上述兩個過程发皿,將事件流分為三個過程:捕獲階段 -->處于目標(biāo)對象階段-->冒泡階段融击。注意,處于目標(biāo)對象階段和冒泡階段同屬于冒泡過程雳窟。

19、JavaScript的變量范圍有什么不同

全局變量:當(dāng)前頁面有效

局部變量:函數(shù)體內(nèi)有效(函數(shù)體內(nèi)部沒有聲明而直接賦值的變量默認(rèn)作為全局變量)

20匣屡、一下程序執(zhí)行的結(jié)果是什么封救?


局部變量未聲明
聲明局部變量

21、null和undefined的區(qū)別是什么

答:

Null類型中只有一個值就是null捣作。unll表示沒有對象誉结,即此處不應(yīng)該有值。例如:

1)作為函數(shù)的參數(shù)券躁,表示該函數(shù)的參數(shù)不是對象惩坑。

2)作為對象原型鏈的終點。

而Undefined類型中只有一個值就是undefined也拜。undefined表示缺少值以舒,即此處應(yīng)有一個值,但是還沒有定義慢哈。例如:

1)變量被聲明但還沒有賦值蔓钟,就是undefined。

2)調(diào)用函數(shù)時卵贱,應(yīng)該提供的參數(shù)沒有提供滥沫,該參數(shù)就等于undefined。

3)對象沒有復(fù)制的屬性键俱,該屬性的值就為undefined兰绣。

4)函數(shù)沒有返回值時,默認(rèn)返回值為undefined编振。

小知識點:

typeof(null)? //返回值為object缀辩;

typeof(undefined)? //返回值為undefined;

console.log(null == undefined) //結(jié)果為true;

console.log(null== undefined) //結(jié)果為false;

因此null和undefined兩者相等雌澄,但不完全相等斋泄。

22、new操作符具體做了什么呢

1镐牺、創(chuàng)建一個空對象炫掐,var obj = new Object();

2、讓空對象的原型屬性指向原型鏈obj.__proto__ = Func.prototype;

3睬涧、讓Func中的this指向obj响逢,并執(zhí)行Func的函數(shù)體。var result = Func.call(obj);

4豆拨、判斷Func的返回值類型:

如果是值類型张症,返回obj。如果是引用類型讶请,就返回這個引用類型的對象祷嘶。

if(typeof(result) == "object") {

func = result;

}else{

func = obj;

}

23、JavaScript延遲加載的方式有哪些

在<script>標(biāo)簽中的代碼夺溢,不論是嵌入代碼還是引用文件论巍,只要不包含defer和async屬性,瀏覽器就會按照<scripe>標(biāo)簽出現(xiàn)的順序?qū)λ麄円来芜M(jìn)行解析风响。也就是說執(zhí)行到這里的時候嘉汰,頁面的處理會暫時停止,一直等待該標(biāo)簽下載和解析完畢之后才會進(jìn)行后續(xù)的工作状勤。這樣的用戶體驗很不好鞋怀,因此才會有異步加載js的需求。

1持搜、defer屬性

html為<script>標(biāo)簽定義了defer屬性密似,表明腳本在執(zhí)行時不會影響頁面構(gòu)造。相當(dāng)于告訴瀏覽器可以立即下載葫盼,但是要延遲執(zhí)行辛友,也就是說腳本會延遲到整個頁面都解析完之后再執(zhí)行。有兩個注意點剪返,h5規(guī)范要求腳本按照他們出現(xiàn)的先后順序執(zhí)行废累。在現(xiàn)實中,延遲腳本并不一定按照順序執(zhí)行脱盲;defer屬性只適用于外部腳本邑滨,嵌入的html腳本會忽略defer屬性。

2钱反、async屬性

<script>標(biāo)簽同樣定義了async屬性掖看,與defer屬性相似都用于改變腳本的行為匣距。運行到含有async屬性的<script>標(biāo)簽時,會異步加載js文件哎壳,不會讓頁面等待腳本的下載和執(zhí)行毅待,但是在該腳本下載完成之后就會立即被執(zhí)行。注意點與defer一樣:只適用于外部腳本归榕;不能控制加載的順序尸红。

defer與async的區(qū)別:(1)defer是將js文件下載完成之后等到頁面完全處理完畢才執(zhí)行;async是在js下載完畢之后立即執(zhí)行刹泄,不管頁面有沒有處理完畢外里。(2)在執(zhí)行順序方面,由于defer屬性會在文件加載完成之后執(zhí)行特石,所以腳本會DOMContentLoaded事件之前執(zhí)行盅蝗。標(biāo)記為async的腳本并不保證按照指定他們的先后順序執(zhí)行,但可能會在DOMContentLoad事件觸發(fā)之前或之后執(zhí)行姆蘸。


藍(lán)色代表js腳本下載事件墩莫,紅色代表js腳本執(zhí)行,綠色代表html解析

3逞敷、動態(tài)創(chuàng)建DOM方式(Document Object Model? ? 文檔對象模型)

addEventListener()方法經(jīng)常用語向指定元素添加時間句柄贼穆。

removeEventLIstener()方法來移除addEventListener()添加的時間句柄。

語法:element.addEventListener(event,function,useCapture)

其中event(必須)字符串兰粉,指定時間名稱。注意不要用"on"作為前綴顶瞳。例如使用"click"而不是使用"onclick".

function(必須)指定事件觸發(fā)時執(zhí)行的函數(shù)玖姑。時間對象會作為第一個參數(shù)傳入函數(shù)。事件對象的類型取決于特定的函數(shù)慨菱。例如"click"事件屬于MouseEcent(鼠標(biāo)移動)事件焰络。

4、使用jQuery的getScript()方法

5符喝、使用setTimeout延遲方法

6闪彼、將js外部文件寫到頁面的最底部,使得js最后被引用协饲,從而加快頁面的加載速度畏腕。

提升頁面性能優(yōu)化

24、如何提高頁面的加載速度

1)減少http請求

2)使用CDN

3)將腳本放在底部

4)避免css表達(dá)式

5)使用外部的JavaScript和css

6)減少DNS查詢

7)避免重定向

原文網(wǎng)址:https://blog.csdn.net/wsymcxy/article/details/82377355

25茉稠、Flash和Ajax的優(yōu)缺點是什么描馅,如何取舍

Ajax對css、文本支持很好而线,支持搜索铭污;多媒體恋日。矢量圖形、機(jī)器訪問不足嘹狞。

Flash適合處理多媒體岂膳、矢量圖形、機(jī)器訪問磅网;多媒體谈截、矢量圖形、機(jī)器訪問不足知市。

二者的共同點:

1)與服務(wù)器無刷新傳遞消息

2)可以檢測用戶離線和在線狀態(tài)

3)操作DOM

26傻盟、Cookie在客戶機(jī)上是如何存儲的

1)cookie的概述

cookie是有http服務(wù)器設(shè)置的,保存在瀏覽器中嫂丙;是客戶端保存數(shù)據(jù)的一個小文件娘赴;是服務(wù)器發(fā)送給客戶端的小量信息;以鍵值對的形式進(jìn)行存儲的跟啤。cookie存儲的數(shù)據(jù)量是有限的诽表,不同的瀏覽器有不同的大小,但是一般來說不會超過40kb隅肥。因此cookie只能存儲一些小量數(shù)據(jù)竿奏。

2)cookie的作用:

①讓瀏覽器存儲指定的信息? ?②與session配合使用,完成會話跟蹤

原文網(wǎng)址:https://blog.csdn.net/Thor_Selen_Liu/article/details/81262023

27腥放、如何獲取JavaScript三個數(shù)中的最大值和最小值

答:

Math.max(a,b,c);//最大值

Math.min(a,b,c);//最小值

28泛啸、JavaScript是面向?qū)ο蟮模趺大w現(xiàn)JavaScript的繼承關(guān)系

答:使用prototype原型來實現(xiàn)

29秃症、from中的input可以設(shè)置為readonly和disabled候址,二者有什么區(qū)別

答:readonly和disabled都可以禁止用戶更改表單的內(nèi)容。比如都設(shè)置為true种柑,form屬性將不能被編輯岗仑。

二者的相同點如下:

都不能編輯和獲取焦點。

不同點如下:

1)readonly只針對input(text/password)和textarea有效聚请,而disabled對所有的表單元素都有效荠雕,包括select,radio驶赏,checkbox等炸卑。

2)表單在使用get或post方式提交時,設(shè)置為readonly的表單元素可以傳值到后臺煤傍;設(shè)置為disabled的表單元素不可以傳值到后臺矾兜。

3)所有控件都有disabled屬性,但不一定擁有readonly屬性患久。例如button按鈕就沒有readyonly屬性椅寺,設(shè)置為readonly也沒有作用浑槽,但是設(shè)置為disabled按鈕就沒辦法使用了。

30返帕、列舉JavaScript的三種主要數(shù)據(jù)類型桐玻,2種復(fù)合類型和2種特殊數(shù)據(jù)類型。

主要數(shù)據(jù)類型:string荆萤,boolean镊靴,number

復(fù)合數(shù)據(jù)類型:function,object

特殊類型:undefined链韭,null

31偏竟、程序中捕獲異常的方法

答:在ES3之前,如果js代碼在執(zhí)行時出現(xiàn)了錯誤敞峭,整個js代碼都會停止執(zhí)行踊谋,這樣的代碼是非常不健壯的。在java或c語言中旋讹,都提供了異常處理機(jī)制殖蚕,可以處理異常而不停止整個應(yīng)用程序。因此在ES3之后js也提供了類似的異常處理機(jī)制沉迹,從而讓代碼變得更加健壯睦疫。即使在執(zhí)行的過程中出現(xiàn)了異常,也讓程序具有一部分的異潮夼唬恢復(fù)的能力蛤育。

try...catch語句的基本格式

1、把有可能出現(xiàn)錯誤的代碼放在try語句中葫松,try語句理論上可以寫任何代碼瓦糕。只要有一行代碼出現(xiàn)問題,整個程序的執(zhí)行流程就會跳到catch語句中執(zhí)行进宝。如果try中的語句不出現(xiàn)錯誤則catch中的語句不會執(zhí)行。

2枷恕、一旦try中有一行代碼發(fā)生異常党晋,整個try語句中錯誤代碼后面的代碼就都不會執(zhí)行了。比如上述代碼中console.log(b)徐块;未玻,如果這行代碼出錯,則立即去執(zhí)行catch中對的代碼胡控。所以console.log("我不會輸出的扳剿,不要找了")這行代碼不會再執(zhí)行。

3昼激、在執(zhí)行catch中的代碼之前庇绽,js引擎首先會根據(jù)錯誤類型自動創(chuàng)建一個錯誤锡搜,并通過catch后面的參數(shù)傳遞到catch中。不同的瀏覽器創(chuàng)建的error對象不一樣瞧掺,但是他們都包含一個message屬性耕餐,值是這個錯誤的一些信息。

4辟狈、catch中的代碼執(zhí)行完畢之后肠缔,后繼續(xù)執(zhí)行后面的代碼,程序不會停止下來哼转。參考其他編程語言明未,也提供了一種finally語句。不管try中的語句有沒有錯誤壹蔓,最后都會執(zhí)行finally中的語句趟妥。

具體的執(zhí)行流程:如果try中的語句沒有出現(xiàn)錯誤,就會在try語句之后執(zhí)行finally語句庶溶;如果try中的語句出現(xiàn)錯誤煮纵,就跳轉(zhuǎn)去執(zhí)行catch語句,最后執(zhí)行finally語句偏螺。

原文網(wǎng)址https://blog.csdn.net/u012468376/article/details/57411822

32行疏、什么是單線程和多線程

javaScript語言的一大特點就是單線程,也就是說同一個時間只能做一件事套像。為什么JavaScript不能有多個線程呢酿联?這樣能提高相率啊。

JavaScript的單線程夺巩,與他的用途有關(guān)贞让。作為瀏覽器腳本語言,JavaScript的主要用途是與用戶進(jìn)行互動以及操作DOM柳譬。這決定了它只能單線程喳张,否則會帶來很多復(fù)雜的問題。假設(shè)JavaScript同時又兩個線程美澳,一個線程在某個DOM節(jié)點上添加內(nèi)容销部,另一個線程刪除了這個節(jié)點,這時瀏覽器會以哪個線程為準(zhǔn)呢制跟?

所以為了避免復(fù)雜性舅桩,從誕生開始JavaScript就是單線程。這已經(jīng)成為了這門語言的核心特征雨膨,將來也不會改變擂涛。為了利用多核cpu的計算能力,html5提出Web Worker標(biāo)準(zhǔn)聊记,允許JavaScript腳本創(chuàng)建多個線程撒妈,但是子線程完全受主線程的控制恢暖,而且不能操作DOM。所以這個新標(biāo)準(zhǔn)并沒有改變JavaScript單線程的本質(zhì)踩身。

33胀茵、什么是同步任務(wù),什么是異步任務(wù)

js單線程意味著所有的任務(wù)都要排隊挟阻,前一個任務(wù)結(jié)束才會執(zhí)行后一個任務(wù)琼娘。如果前一個任務(wù)耗時很長,后一個任務(wù)就要一直等著附鸽。如果是因為計算量大脱拼,cpu忙不過來倒也算了,但很多時候cpu在閑著坷备,是因為IO設(shè)備(輸入輸出設(shè)備)很慢熄浓,不得不等著結(jié)果出來再往下執(zhí)行。

JavaScript語言的設(shè)計者意識到省撑,這時主線程完全可以不管IOS設(shè)備赌蔑,掛起處于等待中的任務(wù),先運行排在后面的任務(wù)竟秫。等到IO設(shè)備返回了結(jié)果娃惯,再回過頭把掛起的任務(wù)繼續(xù)執(zhí)行下去。

于是所有的任務(wù)可以分為兩種肥败,一種是同步任務(wù)(synchronous),另一種是異步任務(wù)(asynchronous)趾浅。同步任務(wù)是指,在主線程上排隊執(zhí)行的任務(wù)馒稍,只有前一個任務(wù)完成才能執(zhí)行后一個任務(wù)皿哨;異步任務(wù)是指,不進(jìn)入主程序纽谒、而進(jìn)入”任務(wù)隊列“的任務(wù)证膨,只有“任務(wù)隊列”通知主線程,某個異步任務(wù)可以執(zhí)行了鼓黔,該任務(wù)才會進(jìn)入主線程執(zhí)行央勒。

具體來說異步執(zhí)行的機(jī)制如下:


異步執(zhí)行機(jī)制


上面代碼執(zhí)行的結(jié)果總是2,1请祖,因為只有在執(zhí)行第二行以后订歪,系統(tǒng)才會執(zhí)行“任務(wù)隊列”中的回調(diào)函數(shù)脖祈。

原文網(wǎng)址http://www.ruanyifeng.com/blog/2014/10/event-loop.html


34肆捕、Ajax的原理

答:AJAX的全稱是"Asynchronous JavaScript and XML"(異步JavaScript和XML),是一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)盖高。通過在后臺與服務(wù)器進(jìn)行少量的數(shù)據(jù)交換慎陵,可以使網(wǎng)頁實現(xiàn)異步更新眼虱。也就是意味著可以再不重新加載整個網(wǎng)頁的情況下,對網(wǎng)頁的某部分進(jìn)行更新席纽。

優(yōu)點:

1.最大的優(yōu)點就是頁面無需刷新捏悬,在頁面內(nèi)與服務(wù)器進(jìn)行通信,非常好的用戶體驗润梯。

2.使用異步的操作與服務(wù)器進(jìn)行通信过牙,不需要終端操作。

3.可以把以前服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁給客戶端纺铭,減輕服務(wù)器和帶寬寇钉,最大限度的減少冗余請求。

4.基于標(biāo)準(zhǔn)化的并被廣泛支持的技術(shù)舶赔,不需要下載小插件或者小程序扫倡。

缺點:

1.ajax干掉了Back和History功能,即對瀏覽器的機(jī)制的破壞竟纳。在動態(tài)更新頁面的情況下撵溃,用戶無法返回前一個狀態(tài),因為瀏覽器只能記住歷史記錄中的靜態(tài)頁面锥累。一個被完整讀入的頁面與一個已經(jīng)被動態(tài)修改過的頁面之間的差距非常微妙缘挑,用戶通常會希望單機(jī)后退按鈕取消前一次操作,但是在ajax應(yīng)用中揩悄,這將無法實現(xiàn)卖哎。

2.安全問題也為it企業(yè)帶來了新的安全威脅,ajax技術(shù)就如同對企業(yè)數(shù)據(jù)建立了一個直接通到删性。這使得開發(fā)者會在不經(jīng)意間透露比以前更多的數(shù)據(jù)和服務(wù)器邏輯亏娜。ajax的邏輯可以對客戶端的安全掃描技術(shù)隱藏起來,允許黑客從遠(yuǎn)端服務(wù)器上進(jìn)行安全攻擊蹬挺。

3.對搜索引擎的支持比較弱维贺。如果使用不當(dāng),ajax會增大網(wǎng)絡(luò)數(shù)據(jù)的流量巴帮,從而降低整個系統(tǒng)的性能溯泣。

35、Ajax原理


36榕茧、解釋一下什么是json

答:

1)json是一種輕量級的數(shù)據(jù)交換格式垃沦。

2)json獨立于語言和平臺,json解析器和json庫支持許多不同的編程語言用押。

3)json的語法表示三種類型值 :簡單值(字符串肢簿、數(shù)值、布爾值、null)池充,數(shù)組桩引,對象

37、js中三種彈出式消息提醒(警告窗口收夸、確認(rèn)窗口坑匠、信息輸入窗口)的命令是什么

答:alert、confirm卧惜、prompt

38厘灼、瀏覽器的滾動距離

答:可視區(qū)域距離頁面頂部的距離

scrollTop = document.documentElement.scrollTop||document.body.scrollTop

39、節(jié)點類型有幾種咽瓷,分別是什么

答:一般來說手幢,每個節(jié)點都擁有nodeType(節(jié)點類型)、nodeName(節(jié)點名稱)和nodeValue(節(jié)點值)這三個屬性忱详。nodeType屬性返回節(jié)點類型的常數(shù)值围来。

一共有12中節(jié)點類型,但其中一部分已經(jīng)棄用(2匈睁、4监透、5、6航唆、12)胀蛮。其中經(jīng)常用到的:

1)元素節(jié)點:nodeType === 1;

2)文本節(jié)點:nodeType === 3糯钙;

3)屬性節(jié)點:nodeType === 2粪狼;

40、innerHTML和outerHTML有什么區(qū)別

答:

innerHTML:元素內(nèi)包含的內(nèi)容

outerHTML:自己及元素內(nèi)包含的內(nèi)容

41任岸、offsetWidth offsetHeight和clientWidth clientHeight的區(qū)別

答:

(1)offsetWidth (content寬度+padding寬度+border寬度)

(2)offsetHeight(content高度+padding高度+border高度)

(3)clientWidth(content寬度+padding寬度)

(4)clientHeight(content高度+padding高度)

42再榄、冒泡排序算法

答:


冒泡排序-從小到大
冒泡排序-從大到小

43、真實DOM及其解析流程

答:瀏覽器渲染引擎工作流程都差不多享潜,大致分為五步困鸥,創(chuàng)建DOM樹——創(chuàng)建StyleRules——創(chuàng)建Render樹——布局Layout——繪制Painting。

第一步剑按,用HTML分析器分析html元素疾就,構(gòu)建一棵DOM樹(標(biāo)記化和樹構(gòu)建)。

第二步艺蝴,用CSS分析器猬腰,分析CSS文件和元素上的inline樣式,生成頁面的樣式表猜敢。

第三步姑荷,將DOM樹和樣式表關(guān)聯(lián)起來侮攀,構(gòu)建一棵Render樹(這一過程又被稱為renderer)。每個dom節(jié)點都有attach方法厢拭,接收樣式信息,返回一個render對象撇叁。這些render對象最終會被構(gòu)建成一棵Render樹供鸠。

第四步,有了Render樹陨闹,瀏覽器開始布局楞捂,為每個Render樹上的節(jié)點確定一個在顯示屏上出現(xiàn)的精確坐標(biāo)。

第五步趋厉,Render樹和節(jié)點顯示坐標(biāo)都有了寨闹,就調(diào)用每個節(jié)點paint方法,把他們繪制出來君账。

44繁堡、為什么要使用虛擬DOM,它有什么好處

答: Web界面由DOM樹(樹的意思是數(shù)據(jù)結(jié)構(gòu))來構(gòu)建乡数,當(dāng)其中一部分發(fā)生變化是椭蹄,其實就是對應(yīng)某個DOM節(jié)點發(fā)生了變化。

虛擬DOM就是為了解決瀏覽器性能問題而被設(shè)計出來的净赴。在以前绳矩,若一次造作中由十次更新DOM的動作,虛擬DOM不會立即操作DOM玖翅,而是將這10次更新的differ內(nèi)容保存到本地的一個js對象中翼馆,最終將這個js對象一次性的attach到DOM樹上,然后再進(jìn)行后續(xù)操作金度,避免大量無謂的計算应媚。

所以使用js對象模擬DOM節(jié)點的好處是,頁面的更新可以先全部反映在js對象(許你DOM)上猜极,操作內(nèi)存中js對象的速度顯然更快珍特,等更新完成后,再將最終的js對象映射成真是的DOM魔吐,交由瀏覽器去繪制扎筒。

45、jsji基礎(chǔ)數(shù)據(jù)類型和引用類型是什么酬姆?這個前提下寫一個getType嗜桌,返回相應(yīng)的類型。

答:

基本數(shù)據(jù)類型:Number辞色、String骨宠、Boolean、Null、Undefined层亿、symbol

引用數(shù)據(jù)類型:Object(Array桦卒、Date、Function)

46匿又、DOM選擇器的優(yōu)先級別是什么方灾,權(quán)重是多少

答:

1.行內(nèi)樣式? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1000

2.id選擇器? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0100

3.類選擇器、偽類選擇器碌更、屬性選擇器[type = 'text']? ? 0010

4.標(biāo)簽選擇器裕偿、偽元素選擇器(::first-line)? ? ? ? ? ? ? ? ?0001

5.通配符選擇器(*)、子選擇器痛单、相鄰選擇器? ? ? ? ? ? 0000

47嘿棘、JavaScript的七種數(shù)據(jù)類型

答:

js在1997年標(biāo)準(zhǔn)化以后,定義了六種數(shù)據(jù)類型旭绒,包括五種原始值和一種引用值鸟妙;ES6又新增了一種原始類型——symbol。

六種原始值:number挥吵、string圆仔、boolean、null蔫劣、undefined坪郭、symbol

(symbol表示獨一無二的值,symbol的最大用途是用來定義對象的唯一屬性名脉幢。ES5的對象屬性名都是字符串歪沃,容易造成屬性名的沖突。如果使用了一個他人提供的對象嫌松,但又想為其添加新的方法沪曙,那么新方法的名字可能與已有的方法產(chǎn)生沖突。因此需要保證每個屬性的名字都是獨一無二的萎羔,以防止屬性名的沖突液走。這就是ES6引入Symbol的原因。)

引用值:

Object:在js中贾陷,除了原始類型缘眶,其他的都是對象類型。原始類型和對象類型不一樣髓废,原始類型存儲在棧中巷懈,對象類型是存儲在堆中;原始值存儲的是值慌洪,對象類型存儲的是地址(指針)顶燕。

48凑保、講一下prototype是什么東西,原型鏈的理解涌攻,什么時候用到prototype

答:原型是function對象的一個屬性欧引,它定義了構(gòu)造函數(shù)制造出對象的公共祖先。通過該構(gòu)造函數(shù)構(gòu)造出的對象恳谎,可以繼承該原型的屬性和方法芝此。原型也是對象。

constructor屬性:指向該函數(shù)的構(gòu)造函數(shù)惠爽。



49、函數(shù)里面的this什么含義瞬哼,什么情況下婚肆,怎么用

50、數(shù)組和對象有哪些原生方法坐慰,列舉一下较性,分別是什么含義,比如連接兩個數(shù)組用哪個方法结胀,刪除數(shù)組指定項和重新組裝數(shù)組(操作數(shù)據(jù)的重點)


51赞咙、vue雙向數(shù)據(jù)綁定的原理是什么

答:?首先傳輸對象的雙向數(shù)據(jù)綁定 Object.defineProperty(target, key, decription),在decription中設(shè)置get和set屬性(此時應(yīng)注意description中g(shù)et和set不能與描述屬性共存)

數(shù)組的實現(xiàn)與對象不同。

同時運用觀察者模式實現(xiàn)wather糟港,用戶數(shù)據(jù)和view視圖的更新

52攀操、JavaScript中的定時器有哪些,他們的區(qū)別及用法是什么

答:setTimeout? ?只執(zhí)行一次

? ? ? ?setInterval? ? 會一直重復(fù)執(zhí)行

53秸抚、請描述一下cookies速和、session Storage和local Storage的相同點和不同點

答:

相同點:都存儲在客戶端

不同點:

1)存儲大小

cookies的數(shù)據(jù)大小不能超過4k

session Storage和local Storage雖然也有存儲大小的限制,但比cookie大得多剥汤,可以達(dá)到5M或更大颠放。

2)有效時間

cookie在設(shè)置的過期時間之前一直有效,即使窗口或瀏覽器關(guān)閉吭敢。

session Storage數(shù)據(jù)在當(dāng)前瀏覽器窗口關(guān)閉之后自動刪除碰凶。

local Storage存儲用舊數(shù)據(jù),瀏覽器關(guān)閉后數(shù)據(jù)也不會丟失鹿驼,除非主動刪除數(shù)據(jù)欲低。

3)數(shù)據(jù)與服務(wù)器之間的交互方式

cookie的數(shù)據(jù)會自動傳遞到服務(wù)器,服務(wù)器端也可以寫cookie到客戶端畜晰。

session Storage和local Storage不會自動把數(shù)據(jù)發(fā)送給服務(wù)器伸头,只會在本地保存。

54舷蟀、計算一個數(shù)組arr所有元素的和

答:

var arr = [1,2,3,4,5,6,7,8,9],

? ? sum = 0,

? ? len = arr.length;

for(i = 0; i < len; i++) {

? ? if(typeof(arr[i]) == "number") {

? ? ? ? sum += arr[i];

? ? }

}

console.log(sum);

51恤磷、數(shù)組去重

var arr = [1,2,3,1,2,3];

? ? Array.prototype.unique = function () {

? ? ? ? //temp進(jìn)行驗證面哼,arr存儲數(shù)據(jù)

? ? ? ? var temp = {};

? ? ? ? ? ? arr = [];

? ? ? ? ? ? len = this.length;

? ? ? ? for(var i = 0; i < len; i++) {

? ? ? ? ? ? if(!temp[this[i]]) {

? ? ? ? ? ? ? ? temp[this[i]] = "abc";

? ? ? ? ? ? ? ? arr.push(this[i]);

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? return arr;

? ? }

? ? alert(arr.unique());

55、document.write和innerHTML的區(qū)別

答:主要區(qū)別:document.write是直接將內(nèi)容寫入頁面的內(nèi)容流扫步,會導(dǎo)致頁面全部重繪魔策,innerHTML將內(nèi)容寫入某個DOM節(jié)點,不會導(dǎo)致頁面全部重繪河胎。

document.write是直接寫入到頁面的內(nèi)容流闯袒,如果在寫之前沒有調(diào)用document.open, 瀏覽器會自動調(diào)用open。每次寫完關(guān)閉之后重新調(diào)用該函數(shù)游岳,會導(dǎo)致頁面被重寫政敢。

innerHTML則是DOM頁面元素的一個屬性,代表該元素的html內(nèi)容胚迫。你可以精確到某一個具體的元素來進(jìn)行更改喷户。如果想修改document的內(nèi)容,則需要修改document.documentElement.innerElement访锻。innerHTML將內(nèi)容寫入某個DOM節(jié)點褪尝,不會導(dǎo)致頁面全部重繪。

innerHTML很多情況下都優(yōu)于document.write期犬,其原因在于其允許更精確的控制要刷新頁面的那一個部分河哑。

原文地址https://www.cnblogs.com/lyd447113735/p/8856982.html

56、簡述一下跨域及其解決方式

57龟虎、什么是mvvm和mvc璃谨,兩者有什么區(qū)別

答:MVVM即Model-View-ViewModel的簡寫。即模型-視圖-視圖模型鲤妥。模型(Model)指的是后端傳遞的數(shù)據(jù)创肥。視圖(View)指的是所看到的頁面歉嗓。視圖模型(ViewModel)是mvvm模式的核心,它是連接view和model的橋梁。它有兩個方向:一是將模型(Model)轉(zhuǎn)化成視圖(View)埠偿,即將后端傳遞的數(shù)據(jù)轉(zhuǎn)化成所看到的頁面灰追。實現(xiàn)的方式是:數(shù)據(jù)綁定布近。二是將視圖(View)轉(zhuǎn)化成模型(Model)执虹,即將所看到的頁面轉(zhuǎn)化成后端的數(shù)據(jù)。實現(xiàn)的方式是:DOM 事件監(jiān)聽菇爪。這兩個方向都實現(xiàn)的算芯,我們稱之為數(shù)據(jù)的雙向綁定。

MVC是Model-View- Controller的簡寫凳宙。即模型-視圖-控制器熙揍。M和V指的意思和MVVM中的M和V意思一樣。C即Controller指的是頁面業(yè)務(wù)邏輯氏涩。使用MVC的目的就是將M和V的代碼分離届囚。MVC是單向通信有梆。也就是View跟Model,必須通過Controller來承上啟下意系。MVC和MVVM的區(qū)別并不是VM完全取代了C泥耀,只是在MVC的基礎(chǔ)上增加了一層VM,只不過是弱化了C的概念蛔添,ViewModel存在目的在于抽離Controller中展示的業(yè)務(wù)邏輯痰催,而不是替代Controller,其它視圖操作業(yè)務(wù)等還是應(yīng)該放在Controller中實現(xiàn)迎瞧。也就是說MVVM實現(xiàn)的是業(yè)務(wù)邏輯組件的重用夸溶,使開發(fā)更高效,結(jié)構(gòu)更清晰凶硅,增加代碼的復(fù)用性缝裁。

58、px和rem的區(qū)別

答:

1.px是相對長度單位咏尝。像素px是相對于顯示屏幕的分辨率而言的压语。

2.em是相對長度單位啸罢。相對于父級字體尺寸编检,會疊加(繼承父級元素字體大小)扰才。

3.rem是相對單位長度允懂,但是相對于根元素字體尺寸。這是css3中新增的一個相對單位(root em 根em)衩匣,與em區(qū)別在于使用rem為元素設(shè)定字體大小時蕾总,仍然是相對大小,但相對的事HTML根元素琅捏。

59生百、解釋一下JavaScript的同源策略

答:限制從一個源加載的文檔或腳本如何與來自另一個源的資源進(jìn)行交互。這是一個用于隔離潛在惡意文件的關(guān)鍵的安全機(jī)制柄延。(來自MDN官方的解釋)

簡單來說就是:一段腳本只能讀取來自于同一來源的窗口和文檔的屬性蚀浆,這里的同一來源指的是主機(jī)名、協(xié)議和端口號的組合

具體解釋:

(1)源包括三個部分:協(xié)議搜吧、域名市俊、端口(http協(xié)議的默認(rèn)端口是80)。如果有任何一個部分不同滤奈,則源不同摆昧,那就是跨域了。

(2)限制:這個源的文檔沒有權(quán)利去操作另一個源的文檔蜒程。這個限制體現(xiàn)在:(要記咨鹉恪)

Cookie伺帘、LocalStorage和IndexDB無法獲取。

無法獲取和操作DOM勇吊。

不能發(fā)送Ajax請求曼追。我們要注意,Ajax只適合同源的通信汉规。

同源策略帶來的麻煩:ajax在不同域名下的請求無法實現(xiàn)礼殊。

60、優(yōu)雅降級和漸進(jìn)增強(qiáng)

答:

優(yōu)雅降級 graceful degradation:一開始就構(gòu)建完整的功能针史,然后再針對低版本瀏覽器進(jìn)行兼容晶伦。

漸進(jìn)增強(qiáng) progressive enhancement:針對低版本瀏覽器進(jìn)行構(gòu)建頁面,保證最基本的功能啄枕,然后再針對高級瀏覽器進(jìn)行效果婚陪、交互等改進(jìn)和追加功能達(dá)到更好的用戶體驗。

區(qū)別:優(yōu)雅降級是從復(fù)雜的現(xiàn)狀開始频祝,并試圖減少用戶體驗的供給泌参,而漸進(jìn)增強(qiáng)則是從一個非常基礎(chǔ)的常空,能夠起作用的版本開始沽一,并不斷擴(kuò)充,以適應(yīng)未來環(huán)境的需要漓糙。降級(功能衰減)意味著往回看铣缠;而漸進(jìn)增強(qiáng)則意味著朝前看,同時保證其根基處于安全地帶昆禽。

61蝗蛙、怎樣添加、移除醉鳖、移動捡硅、復(fù)制、創(chuàng)建和查找節(jié)點

答:

1)創(chuàng)建新節(jié)點

createDocumentFragment()//創(chuàng)建一個dom片段

createElement()//創(chuàng)建一個元素節(jié)點

createTextNode()//創(chuàng)建一個文本節(jié)點

2)添加盗棵、移動壮韭、替換、輸入

appendChild()//添加

removeChild()//移動

replaceChild()//替換

insertBefore()//插入

3)查找

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

getElementsByName()//通過元素的name屬性的值

getElementById()//通過元素id漾根,唯一性

61泰涂、從輸入url到顯示頁面都發(fā)生了什么

答:

1.瀏覽器的地址欄輸入url并按下回車

2.瀏覽器查找當(dāng)前url是否存在緩存,并比較緩存是否過期

3.DNS解析url對應(yīng)的ip

4.根據(jù)ip建立tcp連接(三次握手)

5.HTTP發(fā)送請求

6.服務(wù)器處理請求辐怕,瀏覽器接收HTTP響應(yīng)

7.渲染頁面逼蒙,構(gòu)建DOM樹

8.關(guān)閉TCP連接(四次握手)

原文地址https://www.cnblogs.com/daijinxue/p/6640153.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市寄疏,隨后出現(xiàn)的幾起案子是牢,更是在濱河造成了極大的恐慌僵井,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,496評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驳棱,死亡現(xiàn)場離奇詭異批什,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)社搅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,187評論 3 385
  • 文/潘曉璐 我一進(jìn)店門驻债,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人形葬,你說我怎么就攤上這事合呐。” “怎么了笙以?”我有些...
    開封第一講書人閱讀 157,091評論 0 348
  • 文/不壞的土叔 我叫張陵淌实,是天一觀的道長。 經(jīng)常有香客問我猖腕,道長拆祈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,458評論 1 283
  • 正文 為了忘掉前任倘感,我火速辦了婚禮放坏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘侠仇。我一直安慰自己轻姿,他們只是感情好犁珠,可當(dāng)我...
    茶點故事閱讀 65,542評論 6 385
  • 文/花漫 我一把揭開白布逻炊。 她就那樣靜靜地躺著,像睡著了一般犁享。 火紅的嫁衣襯著肌膚如雪余素。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,802評論 1 290
  • 那天炊昆,我揣著相機(jī)與錄音桨吊,去河邊找鬼。 笑死凤巨,一個胖子當(dāng)著我的面吹牛视乐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播敢茁,決...
    沈念sama閱讀 38,945評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼佑淀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了彰檬?” 一聲冷哼從身側(cè)響起伸刃,我...
    開封第一講書人閱讀 37,709評論 0 266
  • 序言:老撾萬榮一對情侶失蹤谎砾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捧颅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體景图,經(jīng)...
    沈念sama閱讀 44,158評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,502評論 2 327
  • 正文 我和宋清朗相戀三年碉哑,在試婚紗的時候發(fā)現(xiàn)自己被綠了挚币。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,637評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡扣典,死狀恐怖忘晤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情激捏,我是刑警寧澤设塔,帶...
    沈念sama閱讀 34,300評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站远舅,受9級特大地震影響闰蛔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜图柏,卻給世界環(huán)境...
    茶點故事閱讀 39,911評論 3 313
  • 文/蒙蒙 一序六、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蚤吹,春花似錦例诀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,744評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至二驰,卻和暖如春扔罪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桶雀。 一陣腳步聲響...
    開封第一講書人閱讀 31,982評論 1 266
  • 我被黑心中介騙來泰國打工矿酵, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人矗积。 一個月前我還...
    沈念sama閱讀 46,344評論 2 360
  • 正文 我出身青樓全肮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親棘捣。 傳聞我的和親對象是個殘疾皇子辜腺,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,500評論 2 348

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

  • 第3章 基本概念 3.1 語法 3.2 關(guān)鍵字和保留字 3.3 變量 3.4 數(shù)據(jù)類型 5種簡單數(shù)據(jù)類型:Unde...
    RickCole閱讀 5,104評論 0 21
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,092評論 1 32
  • ??JavaScript 與 HTML 之間的交互是通過事件實現(xiàn)的哪自。 ??事件丰包,就是文檔或瀏覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,475評論 1 11
  • ??DOM(文檔對象模型)是針對 HTML 和 XML 文檔的一個 API(應(yīng)用程序編程接口)邑彪。 ??DOM 描繪...
    霜天曉閱讀 3,619評論 0 7
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,737評論 1 92