門戶網(wǎng)站ie兼容性問題學(xué)習(xí)

1、ie8以下不兼容jquery要用原生js操作,這樣會兼容低版本ie瀏覽器

2、然后自己封裝ajax方法兼容ie8以下瀏覽器

輪播圖用js實現(xiàn)

兼容ie8一下瀏覽器的顯示錯誤可以用如下方法:

<!--[if lte IE 8]>

<script src="ie-fix.js"></script>

<link href="ie-fix.css" rel="stylesheet" type="text/css">

<![endif]-->

僅當(dāng)瀏覽頁面的瀏覽器是IE 8或更早版本時,此塊才會應(yīng)用特定于IE的CSS和JavaScript。lte表示“小于或等于”,但您也可以使用lt,gt,gte,!NOT和其他邏輯語法。

參考鏈接 https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/HTML_and_CSS

https://www.sitepoint.com/internet-explorer-conditional-comments/

還可以用 polyfill

https://remysharp.com/2010/10/08/what-is-a-polyfill

判斷瀏覽器需要時才加載js

if (browserSupportsAllFeatures()) {

main();} else {

loadScript('polyfills.js', main);}

function main(err) {

// actual app code goes in here}

function browserSupportsAllFeatures() {

return window.Promise && window.fetch;}

function loadScript(src, done) {

var js = document.createElement('script');

js.src = src;

js.onload = function() {

done();

};

js.onerror = function() {

done(new Error('Failed to load script ' + src));

};

document.head.appendChild(js);}

關(guān)于瀏覽器的可訪問性

- 移動設(shè)備上的用戶。

- 用戶使用其他瀏覽設(shè)備,如電視,手表等。

- 可能沒有最新瀏覽器的舊設(shè)備的用戶。

- 較低規(guī)格設(shè)備的用戶可能具有較慢的處理器。

鍵盤按鍵

document.onkeydown = function(e) {

if(e.keyCode === 13) { // The Enter/Return key

document.activeElement.onclick(e);

}};

常見錯誤#5:DOM操作效率低下

JavaScript使得操作DOM相對容易(即添加,修改和刪除元素),但沒有做任何事情來促進(jìn)這樣做有效。

一個常見的例子是一次添加一個DOM元素的代碼。添加DOM元素是一項昂貴的操作。連續(xù)添加多個DOM元素的代碼效率低下,可能無法正常工作。

當(dāng)需要添加多個DOM元素時,一種有效的替代方法是使用文檔片段,從而提高效率和性能。

例如:

var div = document.getElementsByTagName("my_div");

var fragment = document.createDocumentFragment();

for (var e = 0; e < elems.length; e++) { // elems previously set to list of elements

fragment.appendChild(elems[e]);

}

div.appendChild(fragment.cloneNode(true));

除了本方法本身提高的效率之外,創(chuàng)建附加的DOM元素也很昂貴,而在分離時創(chuàng)建和修改它們?nèi)缓蟾郊铀鼈儠a(chǎn)生更好的性能。

剩余參數(shù)和 arguments對象的區(qū)別

剩余參數(shù)和 arguments對象之間的區(qū)別主要有三個:

- 剩余參數(shù)只包含那些沒有對應(yīng)形參的實參,而 arguments 對象包含了傳給函數(shù)的所有實參。

- arguments對象不是一個真正的數(shù)組,而剩余參數(shù)是真正的 Array實例,也就是說你能夠在它上面直接使用所有的數(shù)組方法,比如 sort,map,forEach或pop。

- arguments對象還有一些附加的屬性 (如callee屬性)。

Objects 和 maps 的比較

Object 和 Map 類似的是,它們都允許你按鍵存取一個值、刪除鍵、檢測一個鍵是否綁定了值。因此(并且也沒有其他內(nèi)建的替代方式了)過去我們一直都把對象當(dāng)成 Map 使用。不過 Map 和 Object 有一些重要的區(qū)別,在下列情況里 Map 會是更好的選擇:

- 一個對象的鍵只能是字符串或者 Symbols,但一個 Map 的鍵可以是任意值,包括函數(shù)、對象、基本類型。

- 你可以通過 size 屬性直接獲取一個 Map 的鍵值對個數(shù),而 Object 的鍵值對個數(shù)只能手動計算。

- Map 是可迭代的,而 Object 的迭代需要先獲取它的鍵數(shù)組然后再進(jìn)行迭代。

- Object 都有自己的原型,所以原型鏈上的鍵名有可能和對象上的鍵名產(chǎn)生沖突。雖然 ES5 開始可以用 map = Object.create(null) 來創(chuàng)建一個沒有原型的對象,但是這種用法不太常見。

- Map 在涉及頻繁增刪鍵值對的場景下會有些性能優(yōu)勢。

像上面的例子中,如果你執(zhí)行var a1 = new A(); var a2 = new A(); 那么 a1.doSomething事實上會指向Object.getPrototypeOf(a1).doSomething,它就是你在 A.prototype.doSomething 中定義的內(nèi)容。也就是說:Object.getPrototypeOf(a1).doSomething == Object.getPrototypeOf(a2).doSomething == A.prototype.doSomething。【補(bǔ)充:實際上當(dāng)執(zhí)行a1.doSomething()相當(dāng)于執(zhí)行Object.getPrototypeOf(a1).doSomething.call(a1)==A.prototype.doSomething.call(a1)】

解構(gòu)賦值語法是一個 Javascript 表達(dá)式,這使得可以將值從數(shù)組或?qū)傩詮膶ο筇崛〉讲煌淖兞恐?br>

箭頭函數(shù)不會創(chuàng)建自己的this,它只會從自己的作用域鏈的上一層繼承this

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

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

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