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
- 暫時性死區:隻要已進入目前作用域,所要使用的變量就已經存在了,但是不可擷取,隻有等到生命變量的那一行代碼出現,才可以擷取和使用該變量