JavaScript理論知識

1、JavaScript的數據類型有哪些?

ECMAScript類型:string number boolean undefined object null
typeof類型:string number boolean undefined object function

2、什麼是事件冒泡?如何阻止事件冒泡?

事件冒泡:事件從目標源開始由裏到外一層層的向上查找
阻止事件冒泡:e.stopPropagation()=>標準瀏覽器;e.cancelBubble=true;=>IE瀏覽器

3、比較變量是否相等時,==和===有什麼區別?

==:比較時,只要兩個比較元素的數值相同就返回true;
===:比較時,兩個比較的元素的數值、類型都相同的情況下才會返回true

4、ajax的請求過程,以及異步請求的優缺點

1>、原生JavaScript請求過程:
  - 創建XMLHTTPRequest請求對象;
  - 使用open方法設置和服務器的交互信息;
  - 設置發送的數據,開始和服務器端交互;
  - 註冊事件;
  - 更新界面;
2>、ajax的優點:
  - 無刷新更新數據:可以在不刷新頁面的前提下與服務器通信,減少用戶等待時間;
  - 異步與服務器通信:不需要打斷用戶的操作,優化了Browser和Server之間的溝通,減少不必要的數據傳輸、時間,降低網絡數據流量;
  - 前端和後端負載平衡:把服務器的部分工作轉嫁到客戶端,減輕服務器負擔,減少請求和響應對服務器造成的負擔,提升站點性能;
  - 界面與應用分離:數據與呈現分離,有利於分工合作、減少非技術人員對頁面的修改造成的WEB應用程序錯誤、提高效率,也更加適用於現在的發佈系統;
3>、ajax的缺點:
  - 破壞了瀏覽器機制:點擊瀏覽器的後退按鈕無法取消上一步操作,用戶無法回到前一個頁面狀態;
  - ajax的安全問題:會暴露數據和服務器邏輯,ajax的邏輯可以對客戶端的安全掃描技術隱藏起來,允許黑客從遠端服務器上建立新的攻擊;
  - 對搜索引擎支持較弱:使用不當,ajax會增大網絡數據的流量,從而降低整個系統的性能;
  - 破壞程序的異常處理機制;
  - 客戶端代碼過多,造成開發上的成本:編寫複雜、容易出錯;冗餘代碼比較多;破壞了Web的原有標準;

function getXMLHttpRequest() {  
   var xhr;  
   if(window.ActiveXObject) {  
        xhr= new ActiveXObject("Microsoft.XMLHTTP");  
   }else if (window.XMLHttpRequest) {  
        xhr= new XMLHttpRequest();  
   }else {  
        xhr= null;  
   }  
   return xhr;  
}  

function save() {  
    var xhr = getXMLHttpRequest();  
    xhr.open("post","url");  
    var data = "name=mikan&address=street...";  
    xhr.send(data);  
    xhr.onreadystatechange= function() {  
        if(xhr.readyState == 4 && xhr.status == 200) {  
             alert("returned:"+ xhr.responseText);  
        }  
    };  
} 
5、document.write()和innerHTML的區別是什麼?

- document.write():指向窗口輸出,直接輸出在瀏覽器中,內容會一直在後邊添加;每次重新調用該函數的時候,頁面會被重寫;
- innerHTML:是DOM元素的一個屬性,代表該元素的HTML內容;

6、window.location.href和window.location.replace的區別是什麼?

二者最主要的區別就是回退的時候返回的頁面不一樣
- window.location.href(“頁面地址b頁面”):從a頁面跳轉到B頁面之後,點擊瀏覽器的後退按鈕時,可以返回到a頁面;會向服務器發送請求;
- window.location.replace(“頁面地址b頁面”):這個方法是用a頁面替代了b頁面,點擊瀏覽器的後退按鈕時,頁面無法返回到a頁面,返回的是進入a頁面之前的那個頁面;不會向服務器發送請求;

7、請問HTTP中的get和post有什麼區別?

參考文章:https://mp.weixin.qq.com/s?__biz=MzI3NzIzMzg3Mw==&mid=100000054&idx=1&sn=71f6c214f3833d9ca20b9f7dcd9d33e4#rd

8、事件綁定和普通事件的區別

  普通事件只支持單個事件,普通事件綁定多個相同事件只會執行最後一個事件,前邊綁定的事件會被覆蓋;而事件綁定可以綁定多個事件,會按照事件綁定的順序依次執行。

<div id="div">點擊</div>
<script>
    var btn = document.getElementById("div");
    //使用.onclick綁定事件的時候,只會輸出2
    div.onclick = function(){
        console.log("1");
    }
    div.onclick = function(){
        console.log("2");
    }
    //使用addEventListener綁定事件的時候,會輸出1,2
    btn.addEventListener("click", function(){
        console.log("1");
    })
    btn.addEventListener("click", function(){
        console.log("2");
    })
</script>
9、call和apply的區別

  在JavaScript中,call()方法和apply()方法都是爲了改變函數運行時上下文而存在的,也就是爲了改變函數體內部 this 的指向。
  二者的區別就是接收的參數不同
  - call(this,arg1,arg2,arg3…)方法:第一個參數指的是改變上下文的this指向;其餘參數以逗號分隔的方式傳過去;
  - apply(this, arr)方法:接收兩個參數,第一個參數表示的是在其中運行的作用域,第二個參數表示的是一個數組或者是arguments對象;

10、HTTP狀態碼有哪些?分別代表什麼?

100:客戶端繼續發送請求
200:表示請求已經發送成功,響應頭信息會隨着響應返回
201:請求已經實現,資源建立
202:服務器已經接收請求
304:Not Modified,表示設置了緩存(參考鏈接:http://blog.csdn.net/gfangxiong/article/details/7420691
400:a、語義有誤,表示當前請求無法被服務器理解;b、表示請求參數有誤
404:表示請求失敗,服務器上未找到資源
405:請求行中指定的請求方法不能被用於請求相應的資源
500:服務器出現問題,導致無法完成對請求的處理

11、異步加載的方式

1>、通過ajax請求來實現異步加載;
2>、調用onload方法實現異步加載;
3>、通過Promise來實現異步加載

12、創建一個對象

1>、object創建對象
   object對象是JS自帶的對象,可以直接使用
   var obj = new Object();
   obj.name = "xxx";
   console.log(typeof obj);//執行結果爲object
2>、使用{}方式創建對象
   var obj = {name:"xxx",age:21};
3>、 使用工廠方式創建對象
   function Person(name){
      var obj = new Object();
      obj.name = name;
      obj.init = function(){}
      return obj;
   }
   var p = Person("xxx");
   p.init();
   描述:在使用工廠方式創建對象時,在函數內部必須將該對象返回出來,這樣在調用該函數時,纔可以使用該函數的方法和屬性,使用該方式創建對象時,this指的就是window對象 。
4>、使用構造函數創建對象
   function Person(name,sex){
      this.name = name;
      this.sex = sex;
      this.init = function(){alert(this.name);}
//(此時就不需要在添加返回值)
   }
   var p1 = new Person("lala","nv");//使用這個方式創建出來的對象類型是function函數類型
   p1.init();
   描述:使用構造函數創建對象時,this指的就是通過該函數實例出來的對象,並且在創建對象時,必須使用new關鍵字來創建,只有使用new創建的函數纔是構造函數;只要沒有使用new關鍵字創建的函數就是一個普通函數,此時調用該函數的對象就是window對象
   在使用構造函數創建對象時,new關鍵字的存在會在該函數內部創建一個空對象,並且將this指向該空對象,函數執行借宿之後就會返回這個空對象,然後this就會指向該函數實例化出來的對象。

13、談談對this的理解

this表示的上下文對象是一個html的DOM對象,可以調用對象的屬性。
在函數被調用的時候,誰調用這個函數,this指的就是誰;

14、3種強制類型轉換和2種隱士類型轉換

3種強制類型轉換:String() Number() Boolean()
2種隱式類型轉換:+ - * 、

15、split和join的區別

split():字符串方法,將字符串按照指定的規則轉換成數組;
join():數組方法,將數組按照指定的規則拼接成字符串;

16、原生JS的window.onload和jQuery的$(document).ready(function(){})有什麼區別?如何使用原生JS實現jQuery的ready方法

原生JS的window.onload:在頁面所有元素包括圖片等全部加載成功之後纔會執行;
jQuery的$(document).ready(function(){}):在頁面的DOM結構加載完成之後就可以執行;

17、JavaScript中的3種彈出式消息提醒的命令是什麼?

- alert():帶確認按鈕的對話框,點擊確認按鈕,對話框關閉;
- confirm():帶有確認和取消按鈕的對話框,點擊確認和取消按鈕都會關閉對話框,只是會返回不同的boolean值,然後可以根據boolean值執行不同的操作;
- prompt():帶有確認和取消按鈕,還帶有輸入框

18、簡述瀏覽器的同源策略

同源指的就是協議、域名和端口都相同;
同源策略對javascript代碼能夠訪問的內容做了很重要的限制,只能訪問與他包含的文檔在同一域下的內容。

19、請描述一下cookies、sessionStorage和localStorage的區別?

參考地址:http://blog.csdn.net/mengStudents/article/details/78581184

20、解釋jsonp的原理,以及爲什麼不是真正的ajax?

  jsonp的原理:動態的創建script標籤,通過script標籤的src屬性來實現跨域,用戶傳遞一個callback參數給服務端;然後服務端返回數據時會將這個callback參數作爲函數名來包裹住json數據,這樣客戶端就可以隨意定製自己的函數來自動處理返回數據
  爲什麼不是真正的ajax:ajax的核心是通過XmlHttpRequest獲取非本頁內容,而jsonp的核心則是動態添加<script>標籤來調用服務器提供的js腳本。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章