js

基礎面試題

css 面試題

js 面試題

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

  • 原始數據類型(Undefined,Null,Boolean,Number、String)-- 棧
  • 引用數據類型(對象、數組和函數)-- 堆
  • 兩種類型的區別是:存儲位置不同:
  • 原始數據類型是直接存儲在棧(stack)中的簡單數據段,占據空間小、大小固定,屬于被頻繁使用數據;
  • 引用數據類型存儲在堆(heap)中的對象,占據空間大、大小不固定,如果存儲在棧中,將會影響程序運行的性能;
  • 引用數據類型在棧中存儲了指針,該指針指向堆中該實體的起始地址。
  • 當解釋器尋找引用值時,會首先檢索其在棧中的地址,取得地址后從堆中獲得實體。

 

 

assign

 

array.from

 

 

 

介紹JS有哪些內置對象

  • 數據封裝類對象: String Number Boolean Array Object
  • 其他對象: Function Math Date Error Arguments RegExp

string number boolean undefined null

  •  

 

dom 事件模型 

  • 冒泡 捕獲

dom 事件流  

  • 事件捕獲的流程

dom 事件級別 

  • dom 0  onclick
  • dom2 addEventListener     Ie attatchEvent
  • dom 3   keyup   鼠標

  • 捕獲的流程 window —>document 

如何獲取body 對象,如何獲取html對象

html 節點document.documentElement

 

null、undefined及未聲明變量之間的區別。如何區分?

  • 未聲明變量默認值為undefined
  • typeof null === 'object' // true
  • typeof undefined === 'undefined' // true

==和===的區別

  • ==比較之前會先進行類型轉換,即不會對類型進行比較。例如:
      12 == '12'  // true
  •   true == 1   // true
  •   false == '0' // true
  • 復制代碼
  • ===會比較數值和類型。例如:
      12 === '12' // false
  •   12 === 12 // true
  •   true === 1 // false
  •   false === '0' // false
  • 復制代碼

如何注冊事件

 

怎么自定義事件

 

call,applybind的作用是什么?兩者區別是什么?

.call和.apply都用于調用函數,第一個參數將用作函數內 this 的值。然而,.call接受逗號分隔的參數作為后面的參數,而.apply接受一個參數數組作為后面的參數。一個簡單的記憶方法是,從call中的 C 聯想到逗號分隔(comma-separated),從apply中的 A 聯想到數組(array)。

function add(a, b) {

return a + b;

}

 

console.log(add.call(null, 1, 2)); // 3

console.log(add.apply(null, [1, 2])); // 3

復制代碼

.call和.apply是立即執行的, .bind 返回函數的副本

 

創建對象幾種方法

1 字面量對象new object 傳參 2  構造函數 new  3 Object.create

什么原型

什么是構造函數

什么是示例

什么是原型鏈

 

function onLoad() {

  var arr = document.getElementsByTagName("p");

  for (var i = 0; i < arr.length; i++) {

    arr[i].onclick = function () {

      alert(i);

    }

  }

}

 

函數節流

函數防抖

 

什么是函數節流?介紹一下應用場景和原理?

  • 函數節流(throttle)是指阻止一個函數在很短時間間隔內連續調用。 只有當上一次函數執行后達到規定的時間間隔,才能進行下一次調用。 但要保證一個累計最小調用間隔(否則拖拽類的節流都將無連續效果)
  • 函數節流用于 onresize, onscroll 等短時間內會多次觸發的事件
  • 函數節流的原理:使用定時器做時間節流。 當觸發一個事件時,先用 setTimout 讓這個事件延遲一小段時間再執行。 如果在這個時間間隔內又觸發了事件,就 clearTimeout 原來的定時器, 再 setTimeout 一個新的定時器重復以上流程。

 

instanceOf 的原理

 

 

new 運算符

聲明一個對象

 

 

箭頭函數需要注意的地方

*當要求動態上下文的時候,就不能夠使用箭頭函數,也就是this的固定化。

1、在使用=>定義函數的時候,this的指向是定義時所在的對象,而不是使用時所在的對象;
2、不能夠用作構造函數,這就是說,不能夠使用new命令,否則就會拋出一個錯誤;
3、不能夠使用arguments對象;
4、不能使用yield命令;

 

 

letconst

 

 

手寫一個promise

 

 

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

  if (操作成功) {

    resolve(value)

  } else {

    reject(error)

  }

})

promise.then(function (value) {

  // success

}, function (value) {

  // failure

})

 

promise 有幾個狀態?

 promise有2個狀態,成功和失敗,怎么讓一個函數無論成功還是失敗都能被調用?

 

Promise.prototype.finally()

 

錯誤監控

 

service-worker