$JavaScript(2)

2一、javascript有哪些方法定義對象

  • 對象字面量: var obj = {};javascript

  • 構造函數: var obj = new Object();前端

  • Object.create(): var obj = Object.create(Object.prototype);vue

2二、常見兼容性問題?

  • png24位的圖片在iE6瀏覽器上出現背景,解決方案是作成PNG8java

  • 瀏覽器默認的marginpadding不一樣。解決方案是加一個全局的*{margin:0;padding:0;}來統一,,可是全局效率很低,通常是以下這樣解決:react

body,ul,li,ol,dl,dt,dd,form,input,h1,h2,h3,h4,h5,h6,p{
margin:0;
padding:0;
}
  • IE下,event對象有x,y屬性,可是沒有pageX,pageY屬性jquery

  • Firefox下,event對象有pageX,pageY屬性,可是沒有x,y屬性.程序員

2二、說說你對promise的瞭解

  • 依照 Promise/A+ 的定義,Promise 有四種狀態:web

    • pending: 初始狀態, 非 fulfilledrejected.後端

    • fulfilled: 成功的操做.數組

    • rejected: 失敗的操做.

    • settled: Promise已被fulfilledrejected,且不是pending

  • 另外, fulfilled rejected一塊兒合稱 settled

  • Promise 對象用來進行延遲(deferred) 和異步(asynchronous) 計算

Promise 的構造函數

  • 構造一個 Promise,最基本的用法以下:

var promise = new Promise(function(resolve, reject) {

        if (...) {  // succeed

            resolve(result);

        } else {   // fails

            reject(Error(errMessage));

        }
    });
  • Promise 實例擁有 then 方法(具備 then 方法的對象,一般被稱爲thenable)。它的使用方法以下:

promise.then(onFulfilled, onRejected)
  • 接收兩個函數做爲參數,一個在 fulfilled 的時候被調用,一個在rejected的時候被調用,接收參數就是 futureonFulfilled 對應resolveonRejected對應 reject

2三、你以爲jQuery源碼有哪些寫的好的地方

  • jquery源碼封裝在一個匿名函數的自執行環境中,有助於防止變量的全局污染,而後經過傳入window對象參數,可使window對象做爲局部變量使用,好處是當jquery中訪問window對象的時候,就不用將做用域鏈退回到頂層做用域了,從而能夠更快的訪問window對象。一樣,傳入undefined參數,能夠縮短查找undefined時的做用域鏈

  • jquery將一些原型屬性和方法封裝在了jquery.prototype中,爲了縮短名稱,又賦值給了jquery.fn,這是很形象的寫法

  • 有一些數組或對象的方法常常能使用到,jQuery將其保存爲局部變量以提升訪問速度

  • jquery實現的鏈式調用能夠節約代碼,所返回的都是同一個對象,能夠提升代碼效率

2四、vue、react、angular

  • Vue.js
    一個用於建立 web 交互界面的庫,是一個精簡的 MVVM。它經過雙向數據綁定把 View 層和 Model 層鏈接了起來。實際的 DOM 封裝和輸出格式都被抽象爲了DirectivesFilters

  • AngularJS
    是一個比較完善的前端MVVM框架,包含模板,數據雙向綁定,路由,模塊化,服務,依賴注入等全部功能,模板功能強大豐富,自帶了豐富的 Angular指令

  • react
    React 僅僅是 VIEW 層是facebook公司。推出的一個用於構建UI的一個庫,可以實現服務器端的渲染。用了virtual dom,因此性能很好。

2五、Node的應用場景

  • 特色:

    • 一、它是一個Javascript運行環境
    • 二、依賴於Chrome V8引擎進行代碼解釋
    • 三、事件驅動
    • 四、非阻塞I/O
    • 五、單進程,單線程
  • 優勢:

    • 高併發(最重要的優勢)
  • 缺點:

    • 一、只支持單核CPU,不能充分利用CPU
    • 二、可靠性低,一旦代碼某個環節崩潰,整個系統都崩潰

2六、談談你對AMDCMD的理解

  • CommonJS是服務器端模塊的規範,Node.js採用了這個規範。CommonJS規範加載模塊是同步的,也就是說,只有加載完成,才能執行後面的操做。AMD規範則是非同步加載模塊,容許指定回調函數

  • AMD推薦的風格經過返回一個對象作爲模塊對象,CommonJS的風格經過對module.exportsexports的屬性賦值來達到暴露模塊對象的目的

2七、那些操做會形成內存泄漏?

  • 內存泄漏指任何對象在您再也不擁有或須要它以後仍然存在

  • setTimeout 的第一個參數使用字符串而非函數的話,會引起內存泄漏

  • 閉包、控制檯日誌、循環(在兩個對象彼此引用且彼此保留時,就會產生一個循環)

2八、web開發中會話跟蹤的方法有哪些

  • cookie

  • session

  • url重寫

  • 隱藏input

  • ip地址

2九、介紹js的基本數據類型

  • UndefinedNullBooleanNumberString

30、介紹js有哪些內置對象?

  • Object JavaScript 中全部對象的父對象

  • 數據封裝類對象:ObjectArrayBooleanNumberString

  • 其餘對象:FunctionArgumentsMathDateRegExpError

3一、說幾條寫JavaScript的基本規範?

  • 不要在同一行聲明多個變量

  • 請使用===/!==來比較true/false或者數值

  • 使用對象字面量替代new Array這種形式

  • 不要使用全局函數

  • Switch語句必須帶有default分支

  • If語句必須使用大括號

  • for-in循環中的變量 應該使用var關鍵字明確限定做用域,從而避免做用域污

3二、JavaScript有幾種類型的值?,你能畫一下他們的內存圖嗎?

  • 棧:原始數據類型(UndefinedNullBooleanNumberString

  • 堆:引用數據類型(對象、數組和函數)

  • 兩種類型的區別是:存儲位置不一樣;

  • 原始數據類型直接存儲在棧(stack)中的簡單數據段,佔據空間小、大小固定,屬於被頻繁使用數據,因此放入棧中存儲;

  • 引用數據類型存儲在堆(heap)中的對象,佔據空間大、大小不固定,若是存儲在棧中,將會影響程序運行的性能;引用數據類型在棧中存儲了指針,該指針指向堆中該實體的起始地址。當解釋器尋找引用值時,會首先檢索其

  • 在棧中的地址,取得地址後從堆中得到實體

                

3三、javascript建立對象的幾種方式?

  • 對象字面量的方式

person={firstname:"Mark",lastname:"Yun",age:25,eyecolor:"black"};
  • function來模擬無參的構造函數

 function Person(){}
    var person=new Person();//定義一個function,若是使用new"實例化",該function能夠看做是一個Class
        person.name="Mark";
        person.age="25";
        person.work=function(){
        alert(person.name+" hello...");
    }
person.work();
  • function來模擬參構造函數來實現(用this關鍵字定義構造的上下文屬性)

function Pet(name,age,hobby){
       this.name=name;//this做用域:當前對象
       this.age=age;
       this.hobby=hobby;
       this.eat=function(){
          alert("我叫"+this.name+",我喜歡"+this.hobby+",是個程序員");
       }
    }
    var maidou =new Pet("麥兜",25,"coding");//實例化、建立對象
    maidou.eat();//調用eat方法
  • 用工廠方式來建立(內置對象)

var wcDog =new Object();
     wcDog.name="旺財";
     wcDog.age=3;
     wcDog.work=function(){
       alert("我是"+wcDog.name+",汪汪汪......");
     }
     wcDog.work();
  • 用原型方式來建立

function Dog(){

     }
     Dog.prototype.name="旺財";
     Dog.prototype.eat=function(){
     alert(this.name+"是個吃貨");
     }
     var wangcai =new Dog();
     wangcai.eat();
  • 用混合方式來建立

function Car(name,price){
      this.name=name;
      this.price=price; 
    }
     Car.prototype.sell=function(){
       alert("我是"+this.name+",我如今賣"+this.price+"萬元");
      }
    var camry =new Car("凱美瑞",27);
    camry.sell(); 

3四、eval是作什麼的?

  • 它的功能是把對應的字符串解析成JS代碼並運行

  • 應該避免使用eval,不安全,很是耗性能(2次,一次解析成js語句,一次執行)

  • JSON字符串轉換爲JSON對象的時候能夠用eval,var obj =eval('('+ str +')')

3五、null,undefined 的區別?

  • undefined 表示不存在這個值。

  • undefined :是一個表示"無"的原始值或者說表示"缺乏值",就是此處應該有一個值,可是尚未定義。當嘗試讀取時會返回 undefined

  • 例如變量被聲明瞭,但沒有賦值時,就等於undefined

  • null 表示一個對象被定義了,值爲「空值」

  • null : 是一個對象(空對象, 沒有任何屬性和方法)

  • 例如做爲函數的參數,表示該函數的參數不是對象;

  • 在驗證null時,必定要使用 === ,由於 ==沒法分別null 和 undefined

3六、["1", "2", "3"].map(parseInt) 答案是多少?

  • [1, NaN, NaN]由於 parseInt 須要兩個參數 (val, radix),其中radix 表示解析時用的基數。

  • map傳了 3(element, index, array),對應的 radix 不合法致使解析失敗。

3七、javascript 代碼中的"use strict";是什麼意思 ? 使用它區別是什麼?

  • use strict是一種ECMAscript 5 添加的(嚴格)運行模式,這種模式使得 Javascript 在更嚴格的條件下運行,使JS編碼更加規範化的模式,消除Javascript語法的一些不合理、不嚴謹之處,減小一些怪異行爲

3八、JSON 的瞭解?

  • JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式

  • 它是基於JavaScript的一個子集。數據格式簡單, 易於讀寫, 佔用帶寬小

  • 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);

3九、js延遲加載的方式有哪些?

  • deferasync、動態建立DOM方式(用得最多)、按需異步載入js

40、同步和異步的區別?

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

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

相關文章
相關標籤/搜索