web前端面試題-JavaScript篇(持續更新...)

1,介紹js的基本數據類型。

Undefined、Null、Boolean、Number、String

2,介紹js有哪些內置對象?

Object 是 JavaScript 中所有對象的父對象
數據封裝類對象:Object、Array、Boolean、Number 和 String
其他對象:Function、Arguments、Math、Date、RegExp、Error

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

1.不要在同一行聲明多個變量。
2.請使用 ===/!==來比較true/false或者數值
3.使用對象字面量替代new Array這種形式
4.不要使用全局函數。
5.Switch語句必須帶有default分支
6.函數不應該有時候有返回值,有時候沒有返回值。
7.For循環必須使用大括號
8.If語句必須使用大括號
9.for-in循環中的變量 應該使用var關鍵字明確限定作用域,從而避免作用域污染。

4,JavaScript原型,原型鏈 ? 有什麼特點?

  • 每個對象都會在其內部初始化一個屬性,就是prototype(原型),當我們訪問一個對象的屬性時,
  • 如果這個對象內部不存在這個屬性,那麼他就會去prototype裏找這個屬性,這個prototype又會有自己的prototype,
  • 於是就這樣一直找下去,也就是我們平時所說的原型鏈的概念。

關係:instance.constructor.prototype = instance.__proto__

特點:

JavaScript對象是通過引用來傳遞的,我們創建的每個新對象實體中並沒有一份屬於自己的原型副本。當我們修改原型時,與之相關的對象也會繼承這一改變。
當我們需要一個屬性的時,Javascript引擎會先看當前對象中是否有這個屬性, 如果沒有的話,
就會查找他的Prototype對象是否有這個屬性,如此遞推下去,一直檢索到 Object 內建對象。
function Func(){}
Func.prototype.name = "Sean";
Func.prototype.getInfo = function() {
       return this.name;
}
var person = new Func();//現在可以參考var person = Object.create(oldObject);
console.log(person.getInfo());//它擁有了Func的屬性和方法
//"Sean"
console.log(Func.prototype);
// Func { name="Sean", getInfo=function()}

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

  • 棧:原始數據類型(Undefined,Null,Boolean,Number、String)
  • 堆:引用數據類型(對象、數組和函數)

兩種類型的區別是:存儲位置不同;

原始數據類型直接存儲在棧(stack)中的簡單數據段,佔據空間小、大小固定,屬於被頻繁使用數據,所以放入棧中存儲;
引用數據類型存儲在堆(heap)中的對象,佔據空間大、大小不固定,如果存儲在棧中,將會影響程序運行的性能;引用數據類型在棧中存儲了指針,該指針指向堆中該實體的起始地址。當解釋器尋找引用值時,會首先檢索其
在棧中的地址,取得地址後從堆中獲得實體

6,Javascript如何實現繼承?

1、構造繼承
2、原型繼承
3、實例繼承
4、拷貝繼承

原型prototype機制或apply和call方法去實現較簡單,建議使用構造函數與原型混合方式。

  function Parent(){
   this.name = 'wang';
  }
  function Child(){
   this.age = 28;
  }
  Child.prototype = new Parent();//繼承了Parent,通過原型
  var demo = new Child();
  alert(demo.age);
  alert(demo.name);//得到被繼承的屬性

7,Javascript作用鏈域?

作用域鏈的作用是保證執行環境裏有權訪問的變量和函數是有序的,作用域鏈的變量只能向上訪問,變量訪問到window對象即被終止,作用域鏈向下訪問變量是不被允許的。

8,談談This對象的理解。

this總是指向函數的直接調用者(而非間接調用者);
如果有new關鍵字,this指向new出來的那個對象;
在事件中,this指向觸發這個事件的對象,特殊的是,IE中的attachEvent中的this總是指向全局對象Window;
this就是指的是當前對象

9,null,undefined 的區別?

  • null 表示一個對象被定義了,值爲“空值”;
  • undefined 表示不存在這個值。
  • typeof undefined //"undefined"
  • undefined :是一個表示"無"的原始值或者說表示"缺少值",就是此處應該有一個值,但是還沒有定義。當嘗試讀取時會返回 undefined;

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

typeof null //"object"

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

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

注意:

在驗證null時,一定要使用 === ,因爲 == 無法分別 null 和 undefined

undefined表示"缺少值",就是此處應該有一個值,但是還沒有定義。典型用法是:

(1)變量被聲明瞭,但沒有賦值時,就等於undefined。
(2) 調用函數時,應該提供的參數沒有提供,該參數等於undefined。
(3)對象沒有賦值的屬性,該屬性的值爲undefined。
(4)函數沒有返回值時,默認返回undefined。

null表示"沒有對象",即該處不應該有值。典型用法是:

(1) 作爲函數的參數,表示該函數的參數不是對象。
(2) 作爲對象原型鏈的終點。

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

[1, NaN, NaN] 因爲 parseInt 需要兩個參數 (val, radix),
其中 radix 表示解析時用的基數。
map 傳了 3 個 (element, index, array),對應的 radix 不合法導致解析失敗。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章