1.js基本數據類型?
- JavaScript 共有八種數據類型,分別是
- Undefined、Null、Boolean、Number、String、Object、Symbol、BigInt。
- 其中 Symbol 和 BigInt 是 ES6 中新增的數據類型
2.let、const、var的區別?
- let和const有暫時性死區,var沒有
- let和const聲明的變量具有塊級作用域,var沒有
- let和const不可以重復聲明,var可以
- const賦值后不可以重新賦值,let和var可以重新賦值
- const必須有初始值、let和var不需要
3.數據類型檢測的方式有哪些?
- typeof ? 除了null 的基本數據類型都能正確判斷,復雜數據類型判斷為object?
- instanceof ? 可以正確判斷對象的類型,原理是判斷在其原型鏈中能否找到該類型的原型。
- constructor ? 原理是通過構造函數來進行判斷
- Object.prototype.toString.call ? 可以判斷所有數據類型
4.null 和 undefined 區別?
- undefined 代表的含義是未定義
- null 代表的含義是空對象
- 一般變量聲明了但還沒有定義的時候會返回undefined
- null 主要用于賦值給一些可能會返回對象的變量,作為初始化。
5.判斷一個對象為空對象的方式?
- JSON.stringfy({})==='{}' (轉化為字符串對比)
- object.keys({}).length===0(獲取對象的key數組的長度為0)
- object.values({}).length===0 (獲取對象的value數組的長度為0)
- object.hasOwnProptyName({}).length===0(獲取自身屬性數組長度為0)
- 使用for in循環遍歷,在遍歷里返回false,外部返回true
6.箭頭函數和普通函數的區別?
- 箭頭函數沒有自己的this
- 箭頭函數不能使用關鍵字new,會報錯
- 箭頭函數不能作為構造函數
- 箭頭函數沒有prototype(原型)
- 箭頭函數沒有arguments(參數列表)
- 箭頭函數不能作為生成器函數
7.this指向?
- this指向函數的直接調用者(而非間接調用者,也就是.前面的)
- 如果有new關鍵字,this指向new出來的那個對象
- 在事件中,this指向目標元素,特殊的是IE的attachEvent中的this總是指向全局對象window
8.什么是跨域?
????????跨域就是,從網頁去請求另一個域名的資源時,如果有域名、端口、協議其中一個不同,都會導致瀏覽器跨域。這是瀏覽器的一種保護機制。
常用解決方案:
- 跨域資源共享(CORS)
- nginx代理跨域?
- nodejs中間件代理跨域
- sonp跨域
- postMessage
9.cookie和storage的區別?
- 存儲大小不同,cookie空間只有4k,localStorage和SeesionStorage有5M
- 生命周期不同,cookie可以設置生命周期,localstorage生命周期是永久,sessionstorage生命周期是會話級別,瀏覽器關閉就銷毀
- 作用域不同,cookie前后端都可以修改,storage只用于前端? ??
- cookie會自動攜帶在請求中,localStorage和SeesionStorage不會?
10.get和post的區別?
- 請求方式不同,一種語意是獲取,一種是提交,通常在請求數據時用get,修改數據時用post
- 參數位置不同,get 是在拼接在url后面,post是在請求體body里
- 參數類型不同,get只能攜帶查詢字符串,post可以攜帶json、formdata格式還有其他格式
- get參數長度有限制,post無限制
- get是明文傳遞參數,post是密文,get不安全
- get會被瀏覽器主動緩存,post不會