精選前端面試題之Javascript(20道)

1.javascript哪些數據類型

在Javascript中只有五種簡單類型,分別爲null,undefined,boolean,String和Number。一種複雜類型:object。代碼類型只有一種形式就是function。javascript

 2:如何判斷javascript的類型

可使用typeof函數java

例如
var name = 'mdemo';console.log(typeof name);// 'string'還能夠用instanceof

3.數組方法pop() push() unshift() shift()

Push()尾部添加 pop()尾部刪除
Unshift()頭部添加 shift()頭部刪除數組

4.javascript的做用域

javascript和其餘語言不一樣,不存在花括號之間的塊級做用域,而是用函數來進行做用域的劃分。瀏覽器

5.javascript中數組的經常使用方法

concat--將兩個數組鏈接起來splice--能夠用來刪除、添加、替換安全

6.IE和標準下有哪些兼容性的寫法

Var ev = ev || window.event
document.documentElement.clientWidth || document.body.clientWidth
Var target = ev.srcElement||ev.target 閉包

7.javascript中數組刪除某一元素如何實現

找到要刪除的元素的索引,而後使用splice(index,1)刪除app

8.函數中的arguments是數組嗎

不是數組,typeof 能夠看到是 object類型,並且arguments還有callee方法,因此不會是數組的。函數

9.什麼叫作閉包

在個人前面的文章中有詳細的介紹。閉包性能

10.事件委託是什麼

讓利用事件冒泡的原理,讓本身的所觸發的事件,讓他的父元素代替執行!學習

11.如何阻止事件冒泡和默認事件

canceBubble return false

12.」==」和「===」的不一樣 

前者會自動轉換類型
後者不會

13.JavaScript裏函數參數arguments是數組嗎? 

在函數代碼中,使用特殊對象 arguments,開發者無需明確指出參數名,經過使用下標就能夠訪問相應的參數。

arguments雖然有一些數組的性質,但其並不是真正的數組,只是一個類數組對象。其並無數組的不少方法,不能像真正的數組那樣調用.jion(),.concat(),.pop()等方法。

14.什麼是"use strict";?使用它的好處和壞處分別是什麼?

在代碼中出現表達式-"use strict"; 意味着代碼按照嚴格模式解析,這種模式使得Javascript在更嚴格的條件下運行。

好處:

  • 消除Javascript語法的一些不合理、不嚴謹之處,減小一些怪異行爲;
  • 消除代碼運行的一些不安全之處,保證代碼運行的安全;
  • 提升編譯器效率,增長運行速度;
  • 爲將來新版本的Javascript作好鋪墊。

壞處:

一樣的代碼,在"嚴格模式"中,可能會有不同的運行結果;一些在"正常模式"下能夠運行的語句,在"嚴格模式"下將不能運行。

15.this對象的理解

this老是指向函數的直接調用者(而非間接調用者);

若是有new關鍵字,this指向new出來的那個對象;

在事件中,this指向觸發這個事件的對象,特殊的是,IE中的attachEvent中的this老是指向全局對象Window;

16.eval是作什麼的?

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

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

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

17.new操做符具體幹了什麼呢?

(1)建立一個空對象,而且 this 變量引用該對象,同時還繼承了該函數的原型。

(2)屬性和方法被加入到 this 引用的對象中。

(3)新建立的對象由 this 所引用,而且最後隱式的返回 this 。

18.call() 和 apply() 的區別和做用?

apply()函數有兩個參數:第一個參數是上下文,第二個參數是參數組成的數組。若是上下文是null,則使用全局對象代替。

如:function.apply(this,[1,2,3]);

call()的第一個參數是上下文,後續是實例傳入的參數序列。

如:function.call(this,1,2,3);

19.原型鏈 

JavaScrip能夠採用構造器(constructor)生成一個新的對象,每一個構造器都擁有一個prototype屬性,而每一個經過此構造器生成的對象都有一個指向該構造器原型(prototype)的內部私有的連接(proto),而這個prototype由於是個對象,它也擁有本身的原型,這麼一級一級直到原型爲null,這就構成了原型鏈.

20.__proto__ 屬性和prototype屬性的區別

prototype是function對象中專有的屬性。
__proto__是普通對象的隱式屬性,在new的時候,會指向prototype所指的對象;
__proto__其實是某個實體對象的屬性,而prototype則是屬於構造函數的屬性。
__proto__只能在學習或調試的環境下使用。

這裏抓住兩點:

  • 構造函數經過 prototype 屬性訪問原型對象
  • 實例對象經過 [[prototype]] 內部屬性訪問原型對象,瀏覽器實現了 __proto__屬性用於實例對象訪問原型對象

Object 爲構造函數時,是Function的實例對象;Function爲構造函數時,Function.prototype 是對象,那麼他就是Object的實例對象。

相關文章
相關標籤/搜索