HTML,CSS,JS試題


1.call和apply方法的用途和區別?

用途:都改變this指向;

區別:call傳遞的是連續參數,apply傳遞的是數組參數

 

2.利用純css構造一個三角形

<style> .dom{ width: 0px; height: 0px; border-width: 40px; border-style: solid; border-color: red transparent transparent transparent; /*或者border-color: transparent transparent red;*/ } </style> <div class="dom"></div>

 

3.JavaScript中typeof可能返回的結果?如何檢測?

string  number object function undefined boolean

方法:Object.prototype.toSring.call()

調用object構造函數上的原型的toSring方法,改變它的this指向

 

4.

push():可向數組的末尾添加一個或多個元素,並返回新的長度

pop():用於刪除並返回數組的最后一個元素。

shift():用於把數組的第一個元素從其中刪除,並返回第一個元素的值

unshift():可向數組的開頭添加一個或更多元素,並返回新的長度。

 

5.什么是默認事件,什么是冒泡事件?如何禁止?

冒泡事件:即事件從最底層逐個經過上面一級級事件的過程,就是冒泡事件。在非IE瀏覽器中提供了一個事件對象stopPropagation,那么在IE瀏覽器中可以通過cancelBubble事件對象阻止。

默認事件:瀏覽器的默認事件就是瀏覽自己的行為,比如我們在點擊<a href="#">的時候,瀏覽器跳轉到指定頁面,或者是當我們滾動鼠標時頁面會向下滾動,但我們按空格鍵和按方向鍵時也會向下滾動,為了更好的用戶體驗,這時我們就需要阻止這種行為的發生。

阻止事件冒泡:

function stopBubble(e) {
    if(e && e.stopPropagation) {        
    e.stopPropagation();     }else {         window.event.cancelBubble = true;        
    }     }

阻止默認事件:

function stopDefault(e) {
    if(e && e.preventDefault) {
        e.preventDefault();
        }else {
          window.event.returnValue = false;
          }
    return false;
}

 

6.異步加載的三種方案

第一種:defer

<script type="text/javascript" src="demo.js" defer="defer"></script>

第二種:async

<script type="text/javascript" src="demo.js" async="async"></script>

第三種:創建script,插入到DOM中,加載完畢后callBack

function loadScript(url, callback){ var script = document.createElement("script"); script.type = "text/javascript"; if (script.readyState){ //IE script.onreadystatechange = function(){ if (script.readyState == "loaded" ||script.readyState == "complete"){ script.onreadystatechange = null; callback(); } }; } else { //Others: Firefox, Safari, Chrome, and Opera   script.onload = function(){   callback(); }; } script.src = url; document.body.appendChild(script); }             

 

7.你了解JS對象嗎?可以簡單說說自定義構造函數創建對象的原理嗎?

var this = {} return this //隱式返回this

var this = Object.create(Person.prototype)return this;//顯式返回

 

8.有字符串“aaabbbcccdddeeefgggaa”,轉換成連續不重復的字符串,eg:abcdefga

var reg = /(.)\1*/g;

var str = 'aaabbbcccdddeeefgggaa';

str.replace(reg,str);

 

9.很多瀏覽器的body都有默認的margin,這個值是多少呢?

8px;

 

10.如今有一個Ul,里面有十億個Li,要求點擊li觸發事件,彈出對應的li的內容

var ul = document.getElementsByTagName('ul')[0];
ul.onclick=function(e) {
  var event = e || window.event;
  var tar = event.target || event.srcElement;
  if(tar.tagName.toLowerCase()==="li")
  alert(tar.innerText);
}

考點:事件委托:“事件代理”即是把原本需要綁定的事件委托給父元素,讓父元素擔當事件監聽的職務

 

11.描述時間線的順序

①、創建Document對象,開始解析web界面。document.readyState='loading'。

②、遇到link外部css,創建線程加載,並繼續原線程的解析。

③、遇到外部js文件,並沒設有async/defer的屬性,瀏覽器正常加載js(阻塞),等js加載完成再執行下面的內容。

④、遇到外部js文件,但是設有async/defer的屬性,瀏覽器創建新的線程進行加載,原線程繼續自己的行為。(async是當加載js完畢直接就執行,defer是頁面解析完畢后再執行,異步加載不允許用document.write());

⑤、遇到Img,先正常解析出dom結構,異步加載src,並繼續進行解析。

⑥、當文檔解析完畢(document.readyState="interative")。

⑦、解析完畢之后,所有設置defer的腳本會按照順序執行。

⑧、document對象觸發DOMContentLoaded事件,標志程序執行從同步腳本執行階段轉換為事件驅動。

⑨、當async的腳本加載並執行后,Img加載完成后,document.readyState="compete"。

⑩、以異步響應處理網絡,用戶操作實行交互。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM