1住诸、ie8以下不兼容jquery要用原生js操作揽乱,這樣會兼容低版本ie瀏覽器
2冕末、然后自己封裝ajax方法兼容ie8以下瀏覽器
輪播圖用js實(shí)現(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元素是一項(xiàng)昂貴的操作几缭。連續(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)形參的實(shí)參否副,而 arguments 對象包含了傳給函數(shù)的所有實(shí)參。
- arguments對象不是一個真正的數(shù)組崎坊,而剩余參數(shù)是真正的 Array實(shí)例备禀,也就是說你能夠在它上面直接使用所有的數(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ù)只能手動計(jì)算夕吻。
- 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事實(shí)上會指向Object.getPrototypeOf(a1).doSomething晤揣,它就是你在 A.prototype.doSomething 中定義的內(nèi)容桥爽。也就是說:Object.getPrototypeOf(a1).doSomething == Object.getPrototypeOf(a2).doSomething == A.prototype.doSomething〉锒桑【補(bǔ)充:實(shí)際上當(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