天天看點

JavaScript面試題

Document

Javascript是什麼?

參考答案

JavaScript是一種屬于網絡的腳本語言,被廣泛應用于web應用開發

Javascript三大組成部分

  • ECMAScripts: Javascript的核心,它規定了js的文法标準。 定義了js是什麼樣子的 描述了語言的基本文法(var、for、if、array等)和資料類型(Number、String、Boolean、Undefined、Object、Symbol)
  • DOM:文檔對象模型,使js用了操縱html标簽的能力,(例如擷取、新增、删除DOM節點)(是 HTML 和 XML 的應用程式接口(API))
  • BOM:浏覽器對象模型,使js擁有了操作浏覽器的能力, (例如彈出新的浏覽器視窗、移動、改變和管理浏覽器視窗、擷取網絡浏覽器資訊(navigator object),頁面資訊(location object),使用者螢幕分辨率的資訊(screen object),對cookies的支援等等。)

資料類型

  • 基本資料類型:Number、String、Null、Undefined、Boolean
  • 複雜資料類型:Object

Promise是什麼?

Promise對象是JavaScript的異步操作解決方案

全局變量

在全局定義的變量為全局變量,(不在任何函數内定義的變量)在這個作用環境中的所有函數對象都是可以調用到全局變量

局部變量

局部變量即定義在函數内部的變量。他的作用環境局限在變量所在的局部環境中。

變量提升

在javascript中,函數和變量聲明都會被提升到函數的頂部。通俗的來說就是我們可以先使用變量,然後再聲明函數。

作用域

在作用域的範圍中,我們可以使用這個作用域的變量,對這個變量進行各種操作。

作用域鍊

(每當執行一個函數就進入一個新的作用域,使用一個變量的時候,首先從目前作用域内部找變量,找到就輸入使用,找不到就往目前函數上層的作用域趙)

箭頭函數和普通函數的差別?

  • 箭頭函數作為匿名函數
  • 箭頭函數不綁定this,會捕獲上下文this,作為自己的this值,任何方法都改變不了this指向,(call(),bind(),apply())
  • 箭頭函數不綁定arguments,用reset參數替代

例舉強制類型轉換和隐式類型轉換

  • 強制:String()、Boolean()、Number()、parseInt()、parseFloat()
  • 隐式:+、-、==、===

typeof傳回哪些資料類型

function、string、boolean、number、undefined、object

call和apply的差別

  • Object.call(this, arg1, arg2) 參數需要分開傳
  • Object.apply(this, [arg1, arg2])   所有參數放在一個數組裡面

列舉操作數組的幾種方法?

列舉操作字元拆的幾種方法?

  • string.charAt(index)

    通過下标找對應的字元
  • string.indexOf(value, startIndex)

    通過字元去找對應的下标值(從左往右)
  • string.lastIndexOf(value, startIndex)

    通過字元去找對應的下标值(從右往左)

split()、 join()的差別?

前者将字元串分割成數組,後者将資料變為字元串

閉包?

定義:閉包就是能夠讀取其他函數内部變量的函數

使得函數不被GC回收

影響:如果過多使用閉包,容易導緻記憶體洩漏

this是什麼?

this就是一個指針,指向調用函數的對象?

get和post的差別

  • post更安全(不會作為url的一部分,不會被緩存,儲存在伺服器日志,以及浏覽器浏覽記錄中)
  • get會緩存靜态資源,post不會(比如html頁面、圖檔,谷歌火狐監測get請求的是靜态資源,則會緩存,如果是資料,則不會緩存)
  • post發送的資料更大,(get有url長度限制,不僅僅是參數值資料長度)
  • post比get慢 (post在真正接收資料之前會先将請求頭發送給伺服器進行确認,然後才真正發送資料)

let、const、var的差別

  • let和const聲明的變量不會出現變量提升,var聲明的變量會提升(let變量也會提升,隻不過因為暫時死區的限制,不能在let聲明變量之前使用)
  • let和const是塊級作用域,var是函數級作用域
  • let和const不允許重複生命(會抛出錯誤)
  • let和const

什麼是變量提升?什麼是暫時性死區

  • 變量提升:變量聲明之前就可以使用,值為undefined
  • 暫時性死區:隻要已進入目前作用域,所要使用的變量就已經存在了,但是不可擷取,隻有等到生命變量的那一行代碼出現,才可以擷取和使用該變量

繼續閱讀