1.location.href="/location.assign(") ,href與assign方法會產(chǎn)生歷史記錄;
location.replace(),在replace之后,瀏覽歷史就被清空了孙蒙。
2.浮動:“浮動元素會脫離文檔流脓诡」檠Γ”
清除浮動:.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
3.angularjs ng-if ng-show ng-hide區(qū)別
在使用anularjs開發(fā)前端頁面時,常常使用ng-show谴古、ng-hide切油、ng-if功能來控制頁面元素的顯示或隱藏,那他們之間有什么不同呢简软?
實(shí)現(xiàn)原理方面:ng-show/ng-hide是通過修改CSS樣式方式控制元素顯示與隱藏,對應(yīng)的DOM元素會一直存在于當(dāng)前頁面中述暂,而ng-if根據(jù)表達(dá)式的值動態(tài)的在當(dāng)前的頁面中添加刪除頁面元素痹升。如果賦值表達(dá)式的值為false,那么這個元素就會從頁面中刪除贸典,否則會添加一個元素视卢。ng-if創(chuàng)建元素時用的是被它編譯后的代碼踱卵,如果ng-if內(nèi)部的代碼被其它方式修改過廊驼,那么修改只會對本次展現(xiàn)有效,頁面元素重新渲染后修改效果會消失惋砂,而ng-show/ng-hide則能夠保留dom元素上次修改后的狀態(tài)妒挎。在作用域方面,兩者也存在差異:當(dāng)一個元素被ng-if從DOM中刪除時西饵,與其關(guān)聯(lián)的作用域也會被銷毀酝掩。而且當(dāng)它重新加入DOM中時,則會生成一個新的作用域眷柔,而ng-show和ng-hide則不會期虾。
4.[1]定義
瀏覽器內(nèi)核分成兩部分渲染引擎和js引擎原朝,由于js引擎越來越獨(dú)立,內(nèi)核就傾向于只指渲染引擎
渲染引擎是一種對HTML文檔進(jìn)行解析并將其顯示在頁面上的工具
[2]渲染引擎:
firefox使用gecko引擎
IE使用Trident引擎
2015年微軟推出自己新的瀏覽器镶苞,原名叫斯巴達(dá)喳坠,后改名edge,使用edge引擎
opera最早使用Presto引擎,后來?xiàng)売?/p>
chrome\safari\opera使用webkit引擎
13年chrome和opera開始使用Blink引擎
js引擎:
老版本IE使用Jscript引擎
IE9之后使用Chakra引擎
edge瀏覽器仍然使用Chakra引擎
firefox使用monkey系列引擎
safari使用的SquirrelFish系列引擎
Opera使用Carakan引擎
chrome使用V8引擎茂蚓。nodeJs其實(shí)就是封裝了V8引擎
5.判斷瀏覽器類型的主要就是window.navigater.userAgent對象壕鹉。
6.實(shí)現(xiàn)單行文本的溢出顯示省略號 用text-overflow:ellipsis屬性來,當(dāng)然還需要加寬度width屬來兼容部分瀏覽聋涨。
overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
7. 對于依賴的模塊晾浴,AMD 是提前執(zhí)行,CMD 是延遲執(zhí)行牍白。不過 RequireJS 從 2.0 開始脊凰,也改成可以延遲執(zhí)行(根據(jù)寫法不同,處理方式不同)茂腥。CMD 推崇 as lazy as possible.
?CMD 推崇依賴就近笙各,AMD 推崇依賴前置。
看代碼:// CMD
define(function(require, exports, module) {? var a = require('./a')? a.doSomething() ? ?var b = require('./b') // 依賴可以就近書寫? b.doSomething()? // ... })
// AMD 默認(rèn)推薦的是
define(['./a', './b'], function(a, b) {? // 依賴必須一開始就寫好? ? a.doSomething()? ? b.doSomething()? ? ...})
8.HTTP緩存技術(shù)础芍,304和200有何區(qū)別
瀏覽器第一次加載資源的時候杈抢,返回一般為200,意思是成功獲取資源仑性,并會在瀏覽器的緩存中記錄下max-age惶楼,第二次訪問的時候:如果只是用瀏覽器打開,那么瀏覽器會去判斷這個資源在緩存里有沒有诊杆,如果有的話歼捐,會去判斷max-age,看看過期沒有晨汹,如果沒有過期豹储,則直接讀緩存,根本不會和服務(wù)器進(jìn)行交互淘这,換句話說剥扣,斷網(wǎng)都能打開,就和本地跑一樣铝穷!如果已經(jīng)過期了钠怯,那就去服務(wù)器請求,等待服務(wù)器響應(yīng)曙聂,這是很費(fèi)時間的晦炊,服務(wù)器如果發(fā)現(xiàn)資源沒有改變過,那么就會返回304,告訴瀏覽器断国,我沒變過贤姆,你去讀緩存吧,于是瀏覽器也不用從服務(wù)器拉數(shù)據(jù)了稳衬,然而庐氮,等待服務(wù)器響應(yīng)也是一個很要命的問題,在網(wǎng)速發(fā)達(dá)的今天宋彼,等一個響應(yīng)弄砍,有時比下載還慢。
如果是用瀏覽器刷新的输涕,那么瀏覽器不會去判斷max-age了音婶,直接去服務(wù)器拿,如果服務(wù)器判斷資源沒變過莱坎,則還是會返回304衣式,和上面是一樣的,所以刷新一下檐什,其實(shí)很可怕碴卧,等于把所有的資源都要去服務(wù)器請求一邊,問問服務(wù)器我過期了沒有乃正。