json和ajax簡單面試題

  • JSON 的瞭解?

     JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。
     它是基於JavaScript的一個子集。數據格式簡單, 易於讀寫, 佔用帶寬小
     如:{"age":"12", "name":"back"}
    
     JSON字符串轉換爲JSON對象:
     var obj =eval('('+ str +')');
     var obj = str.parseJSON();
     var obj = JSON.parse(str);
    
     JSON對象轉換爲JSON字符串:
     var last=obj.toJSONString();
     var last=JSON.stringify(obj);
    
  • [].forEach.call($$("*"),function(a){a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16)}) 能解釋一下這段代碼的意思嗎?

  • js延遲加載的方式有哪些?

     defer和async、動態創建DOM方式(用得最多)、按需異步載入js
    
  • Ajax 是什麼? 如何創建一個Ajax?

     ajax的全稱:Asynchronous Javascript And XML。
     異步傳輸+js+xml。
     所謂異步,在這裏簡單地解釋就是:向服務器發送請求的時候,我們不必等待結果,而是可以同時做其他的事情,等到有了結果它自己會根據設定進行後續操作,與此同時,頁面是不會發生整頁刷新的,提高了用戶體驗。
    
     (1)創建XMLHttpRequest對象,也就是創建一個異步調用對象
     (2)創建一個新的HTTP請求,並指定該HTTP請求的方法、URL及驗證信息
     (3)設置響應HTTP請求狀態變化的函數
     (4)發送HTTP請求
     (5)獲取異步調用返回的數據
     (6)使用JavaScript和DOM實現局部刷新
    
  • Ajax 解決瀏覽器緩存問題?

      1、在ajax發送請求前加上 anyAjaxObj.setRequestHeader("If-Modified-Since","0")。
    
      2、在ajax發送請求前加上 anyAjaxObj.setRequestHeader("Cache-Control","no-cache")。
    
      3、在URL後面加上一個隨機數: "fresh=" + Math.random();。
    

       4、在URL後面加上時間戳:"nowtime=" + new Date().getTime();。

    5、如果是使用jQuery,直接這樣就可以了 $.ajaxSetup({cache:false})。這樣頁面的所有ajax都會執行這條語句就是不需要保存緩存記錄。
  • 同步和異步的區別?

    同步的概念應該是來自於OS中關於同步的概念:不同進程爲協同完成某項工作而在先後次序上調整(通過阻塞,喚醒等方式).同步強調的是順序性.誰先誰後.異步則不存在這種順序性.

    同步:瀏覽器訪問服務器請求,用戶看得到頁面刷新,重新發請求,等請求完,頁面刷新,新內容出現,用戶看到新內容,進行下一步操作。

    異步:瀏覽器訪問服務器請求,用戶正常操作,瀏覽器後端進行請求。等請求完,頁面不刷新,新內容也會出現,用戶看到新內容。

    (待完善)

  • 如何解決跨域問題?

     jsonp、 iframe、window.name、window.postMessage、服務器上設置代理頁面
    
  • 頁面編碼和被請求的資源編碼如果不一致如何處理?

  • 模塊化開發怎麼做?

    立即執行函數,不暴露私有成員

         var module1 = (function(){
             var _count = 0;
             var m1 = function(){
               //...
             };
             var m2 = function(){
               //...
             };
             return {
               m1 : m1,
               m2 : m2
             };
           })();
    

    (待完善)

  • AMD(Modules/Asynchronous-Definition)、CMD(Common Module Definition)規範區別?

    AMD 規範在這裏:https://github.com/amdjs/amdjs-api/wiki/AMD

    CMD 規範在這裏:https://github.com/seajs/seajs/issues/242

     Asynchronous Module Definition,異步模塊定義,所有的模塊將被異步加載,模塊加載不影響後面語句運行。所有依賴某些模塊的語句均放置在回調函數中。
    
      區別:
    
         1. 對於依賴的模塊,AMD 是提前執行,CMD 是延遲執行。不過 RequireJS 從 2.0 開始,也改成可以延遲執行(根據寫法不同,處理方式不同)。CMD 推崇 as lazy as possible.
         2. CMD 推崇依賴就近,AMD 推崇依賴前置。看代碼:
    
     // CMD
     define(function(require, exports, module) {
         var a = require('./a')
         a.doSomething()
         // 此處略去 100 行
         var b = require('./b') // 依賴可以就近書寫
         b.doSomething()
         // ...
     })
    
     // AMD 默認推薦
     define(['./a', './b'], function(a, b) { // 依賴必須一開始就寫好
         a.doSomething()
         // 此處略去 100 行
         b.doSomething()
         // ...
     })
    
  • requireJS的核心原理是什麼?(如何動態加載的?如何避免多次加載的?如何 緩存的?)

     參考:http://annn.me/how-to-realize-cmd-loader/
    
  • JS模塊加載器的輪子怎麼造,也就是如何實現一個模塊加載器?

  • 談一談你對ECMAScript6的瞭解?

  • ECMAScript6 怎麼寫class麼,爲什麼會出現class這種東西?

  • 異步加載JS的方式有哪些?

       (1) defer,只支持IE
    
       (2) async:
       (3) 創建script,插入到DOM中,加載完畢後callBack
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章