主頁 > 企業開發 > JS面試題總結

JS面試題總結

2021-01-03 06:28:47 企業開發

1. JS 有哪些資料型別?

    根據 JavaScript 中的變數型別傳遞方式,分為基本資料型別參考資料型別兩大類七種,

    基本資料型別包括UndefinedNullBooleanNumberStringSymbol (ES6新增)六種
參考資料型別只有Object一種,主要包括物件、陣列和函式,

    判斷資料型別采用typeof運算子,有兩種語法:

typeof 123;//語法一

const FG = 123;
typeof FG;//語法二

typeof(null) //回傳 object;
null == undefined //回傳true,因為undefined派生自null;
null === undefined //回傳false,

2. 基本資料型別和參考資料型別有什么區別?

    (1)兩者作為函式的引數進行傳遞時:

        基本資料型別傳入的是資料的副本,原資料的更改不會影響傳入后的資料,

        參考資料型別傳入的是資料的參考地址,原資料的更改會影響傳入后的資料,

    (2)兩者在記憶體中的存盤位置:

        基本資料型別存盤在堆疊中

        參考資料型別在堆疊中存盤了指標,該指標指向的資料物體存盤在堆中

3. 判斷資料型別的方法有哪些?

    (1)利用typeof可以判斷資料的型別;

    (2)A instanceof B可以用來判斷A是否為B的實體,但它不能檢測 null 和 undefined

    (3)B.constructor == A可以判斷A是否為B的原型,但constructor檢測 Object與instanceof不一樣,還可以處理基本資料型別的檢測

不過函式的 constructor 是不穩定的,這個主要體現在把類的原型進行重寫,在重寫的程序中很有可能出現把之前的constructor給覆寫了,這樣檢測出來的結果就是不準確的,

    (4)Object.prototype.toString.call()

Object.prototype.toString.call() 是最準確最常用的方式,

4. 與深拷貝有何區別?如何實作?

    淺拷貝只復制指向某個物件的指標,而不復制物件本身,淺拷貝的實作方式有:

        (1)Object.assign():需注意的是目標物件只有一層的時候,是深拷貝;

        (2)擴展運算子;

     深拷貝就是在拷貝資料的時候,將資料的所有參考結構都拷貝一份,深拷貝的實作方式有:

        (1)手寫遍歷遞回賦值;

        (2)結合使用JSON.parse()JSON.stringify()方法,

5. let、const的區別是什么?

    varletconst都是用于宣告變數或函式的關鍵字,其區別在于:

var let const
作用域 函式作用域 塊級作用域 塊級作用域
作用域內宣告提升 無(暫時性死區)
是否可重復宣告
是否可重復賦值 否(常量)
初始化時是否必需賦值

6. 什么是執行背景關系和執行堆疊?

    變數或函式的執行背景關系,決定了它們的行為以及可以訪問哪些資料,每個背景關系都有一個關聯的變數物件,而這個背景關系中定義的所有變數和函式都存在于這個物件上(如DOM中全域背景關系關聯的便是window物件),

    每個函式呼叫都有自己的背景關系,當代碼執行流進入函式時,函式的背景關系被推到一個執行堆疊中,在函式執行完之后,執行堆疊會彈出該函式背景關系,在其上的所有變數和函式都會被銷毀,并將控制權返還給之前的執行背景關系, JS的執行流就是通過這個執行堆疊進行控制的


7. 什么是作用域和作用域鏈?

    作用域可以理解為一個獨立的地盤,可以理解為識別符號所能生效的范圍,作用域最大的用處就是隔離變數,不同作用域下同名變數不會有沖突,ES6中有全域作用域、函式作用域和塊級作用域三層概念,

    當一個變數在當前塊級作用域中未被定義時,會向父級作用域(創建該函式的那個父級作用域)尋找,如果父級仍未找到,就會再一層一層向上尋找,直到找到全域作用域為止,這種一層一層的關系,就是作用域鏈

8. 作用域和執行背景關系的區別是什么?

    (1)函式的執行背景關系只在函式被呼叫時生成,而其作用域在創建時已經生成;

    (2)函式的作用域會包含若干個執行背景關系(有可能是零個,當函式未被呼叫時),

9. this指向的各種情況都有什么?

    this的指向只有在呼叫時才能被確定,因為this是執行背景關系的一部分,

        (1)全域作用域中的函式:其內部this指向window

var a = 1;
function fn(){
  console.log(this.a)
}
fn() //輸出1

        (2)物件內部的函式:其內部this指向物件本身:

var a = 1;
var obj = {
  a:2,
  fn:function(){
  	console.log(this.a)
	}
}

obj.fn() //輸出2

        (3)建構式:其內部this指向生成的實體:

function createP(name,age){
	this.name = name //this.name指向P
  this.age = age //this.age指向P
}
var p = new createP("老李",46)

        (4)由applycallbind改造的函式:其this指向第一個引數:

function add(c,d){
	return this.a + this.b + c + d
}
var o = {a:1,b:2)
add.call(o,5,7) //輸出15

        (5)箭頭函式:箭頭函式沒有自己的this,看其外層的是否有函式,如果有,外層函式的this就是內部箭頭函式的this,如果沒有,則thiswindow

10.如何改變this指標的指向?

    可以使用applycallbind方法改變this指向(并不會改變函式的作用域),比較如下:

        (1)三者第一個引數都是this要指向的物件,也就是想指定的背景關系,背景關系就是指呼叫函式的那個物件(沒有就指向全域window);

        (2)applybind的第二個引數都是陣列,call接收多個引數并用逗號隔開;

        (3)applycall只對原函式做改動,bind會回傳新的函式(要生效還得再呼叫一次),

11.什么是閉包?

    閉包就是參考了其他函式作用域中變數的函式,這種模式通常在函式嵌套結構中實作,里面的函式可以訪問外面函式的變數,外面的變數的是這個內部函式的一部分,閉包有如下作用:

        (1)加強封裝,模擬實作私有變數;

        (2)實作常駐記憶體的變數,

閉包不能濫用,否則會導致記憶體泄露,影響網頁的性能,閉包使用完了后,要立即釋放資源,將參考變數指向null


12. 什么是原型、原型鏈?

    原型:JS宣告建構式(用來實體化物件的函式)時,會在記憶體中創建一個對應的物件,這個物件就是原函式的原型建構式默認有一個prototype屬性prototype的值指向函式的原型,同時原型中也有一個constructor屬性constructor的值指向原函式

    通過建構式實體化出來的物件,并不具有prototype屬性,其默認有一個__proto__屬性__proto__的值指向建構式的原型物件,在原型物件上添加或修改的屬性,在所有實體化出的物件上都可共享,

在這里插入圖片描述

    當在實體化的物件中訪問一個屬性時,首先會在該物件內部尋找,如找不到,則會向其__proto__指向的原型中尋找,如仍找不到,則繼續向原型中__proto__指向的上級原型中尋找,直至找到或Object.prototype為止,這種鏈狀程序即為原型鏈


13. 何為防抖和節流?如何實作?

    防抖和節流都是防止短時間內高頻觸發事件的方案,

    防抖的原理是:如果一定時間內多次執行了某事件,則只執行其中的最后一次,

    節流的原理是:要執行的事件每隔一段時間會被冷卻,無法執行,

    應用場景有:搜索框實時搜索,滾動改變相關的事件,

//@fn: 要執行的函式
//@delay: 設定的時限

//防抖函式
function debunce(fn,delay){
	let flag = null;
  return function(){
  	if(flag) clearTimeout(flag)
    //利用apply改變函式指向,使得封裝后的函式可以接收event本身
    flag = setTimeout(()=>fn.apply(this,arguments),delay)
  }
}

//節流函式
function throttle(fn,delay){
	let flag = true;
  return function(){
  	if(!flag) return false;
    flag = false;
    setTimeout(()=>{
      fn.apply(this,arguments)
      flag=true
    },delay)
  }
}

14. 如何理解同步和異步?

    同步:按照代碼書寫順序一一執行處理指令的一種模式,上一段代碼執行完才能執行下一段代碼,

    異步:可以理解為一種并行處理的方式,不必等待一個程式執行完,可以執行其它的任務,

JS之所以需要異步的原因在于JS是單執行緒運行的,常用的異步場景有:定時器、ajax請求、事件系結

15. JS是如何實作異步的?

    JS引擎是單執行緒的,但又能實作異步的原因在于事件回圈和任務佇列體系,

    事件回圈:

        JS 會創建一個類似于 while (true) 的回圈,每執行一次回圈體的程序稱之為 Tick,每次 Tick 的程序就是查看是否有待處理事件,如果有則取出相關事件及回呼函式放入執行堆疊中由主執行緒執行,待處理的事件會存盤在一個任務佇列中,也就是每次 Tick 會查看任務佇列中是否有需要執行的任務,

    任務佇列:

        異步操作會將相關回呼添加到任務佇列中,而不同的異步操作添加到任務佇列的時機也不同,如 onclick, setTimeout, ajax 處理的方式都不同,這些異步操作是由瀏覽器內核的 webcore 來執行的,瀏覽器內核包含3種 webAPI,分別是 DOM Bindingnetworktimer模塊,

        onclick DOM Binding 模塊來處理,當事件觸發的時候,回呼函式會立即添加到任務佇列中,
setTimeouttimer 模塊來進行延時處理,當時間到達的時候,才會將回呼函式添加到任務佇列中,
ajaxnetwork 模塊來處理,在網路請求完成回傳之后,才將回呼添加到任務佇列中,

    主執行緒:

        JS 只有一個執行緒,稱之為主執行緒,而事件回圈是主執行緒中執行堆疊里的代碼執行完畢之后,才開始執行的,所以,主執行緒中要執行的代碼時間過長,會阻塞事件回圈的執行,也就會阻塞異步操作的執行,

        只有當主執行緒中執行堆疊為空的時候(即同步代碼執行完后),才會進行事件回圈來觀察要執行的事件回呼,當事件回圈檢測到任務佇列中有事件就取出相關回呼放入執行堆疊中由主執行緒執行,

16. 什么是AJAX?如何實作?

    ajax是一種能夠實作區域網頁重繪的技術,可以使網頁異步重繪,

    ajax的實作主要包括四個步驟:

        (1)創建核心物件XMLhttpRequest

        (2)利用open方法打開與服務器的連接;

        (3)利用send方法發送請求;("POST"請求時,還需額外設定請求頭)

        (4)監聽服務器回應,接識訓傳值,

//1-創建核心物件
//該物件有兼容問題,低版本瀏覽器應使用ActiveXObject
const xthhp = new XMLHttpRequest();
//2-連接服務器
//open(method,url,async)
xhttp.open("POST","http://localhost:3000",true)
//設定請求頭
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
//3-發送請求
//send方法發送請求引數,如為GET方法,則在open中url后拼接
xhttp.send({_id:123})
//4-接收服務器回應
//onreadystatechange事件,會在xhttp的狀態發生變化時自動呼叫
xhttp.onreadystatechange =function(){
  //狀態碼共5種:0-未open  1-已open  2-已send  3-讀取回應  4-回應讀取結束
  if(xhttp.readyState == 4 && xhttp.status == 200){
  	alert("ajax請求已完成")
  }
}

17. 實作異步的方式有哪些?

    (1)回呼函式模式:將需要異步執行的函式作為回呼函式執行,其缺點在于處理復雜邏輯異步邏輯時,會造成回呼地獄(回呼嵌套層數太多,代碼結構混亂);

    (2)事件監聽模式:采用事件驅動的思想,當某一事件發生時觸發執行異步函式,其缺點在于整個代碼全部得變為事件驅動模式,難以分辨主流程;

    (3)發布訂閱模式:當異步任務執行完成時發布訊息給信號中心,其他任務通過在信號中心中訂閱訊息來確定自己是否開始執行;

    (4)Promise(ES6)Promise物件共有三種狀態pending(初始化狀態)、fulfilled(成功狀態)、rejected(失敗狀態),

    (5)async/await(ES7):基于Promise實作的異步函式;
    (6)利用生成器實作,

18. 怎么理解Promise物件?

    Promise物件有如下兩個特點

        (1)物件的狀態不受外界影響Promise物件共有三種狀態pendingfulfilledrejected,狀態值只會被異步結果決定,其他任何操作無法改變,

        (2)狀態一旦成型,就不會再變,且任何時候都可得到這個結果,狀態值會由pending變為fulfilledrejected,這時即為resolved

    Promise的缺點有如下三個缺點:

        (1)Promise一旦執行便無法被取消;

        (2)不可設定回呼函式,其內部發生的錯誤無法捕獲;

        (3)當處于pending狀態時,無法得知其具體發展到了哪個階段,

    Pomise中常用的方法有:

        (1)Promise.prototype.then()Promise實體的狀態發生改變時,會呼叫then內部的回呼函式,then方法接受兩個引數(第一個為resolved狀態時時執行的回呼,第一個為rejected狀態時時執行的回呼)

        (2)Promise.prototype.catch().then(null, rejection).then(undefined, rejection)的別名,用于指定發生錯誤時的回呼函式,

19. 怎么理解宏任務,微任務???

    宏任務有:script(整體代碼)setTimeoutsetIntervalI/O、頁面渲染;

    微任務有:Promise.thenObject.observeMutationObserver

    執行順序大致如下:

        主執行緒任務——>宏任務——>微任務——>微任務里的宏任務——>.......——>直到任務全部完成

20. 什么是跨域?怎么解決跨域問題?

    跨域問題實際是由同源策略衍生出的一個問題,當傳輸協議、域名、埠任一部分不一致時,便會產生跨域問題,從而拒絕請求,但<img src=https://www.cnblogs.com/stjerne/p/XXX> <link href=XXX><script src=XXX>;天然允許跨域加載資源,解決方案有:

        (1)JSONP

            原理:利用<script>;標簽沒有跨域限制的漏洞,使得網頁可以得到從其他來源動態產生的JSON資料(前提是服務器支持),

            優點:實作簡單,兼容性好,

            缺點:僅支持get方法,容易受到XSS攻擊,

        (2)CORS

        原理:服務器端設置Access-Control-Allow-Origin以開啟CORS,該屬性表示哪些域名可以訪問資源,如設定通配符則表示所有網站均可訪問,

        實作實體(express):

//app.js中設定
var app = express();

//CORS跨域-------------------------------------------------------------------------------------
// CORS:設定允許跨域中間件
var allowCrossDomain = function (req, res, next) {
  // 設定允許跨域訪問的 URL(* 表示允許任意 URL 訪問)
  res.header("Access-Control-Allow-Origin", "*");
  // 設定允許跨域訪問的請求頭
  res.header("Access-Control-Allow-Headers", "X-Requested-With,Origin,Content-Type,Accept,Authorization");
  // 設定允許跨域訪問的請求型別
  res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
  // 設定允許服務器接收 cookie
  res.header('Access-Control-Allow-Credentials', 'true');
  next();
};
app.use(allowCrossDomain);
//------------------------------------------------------------------------------------

        (3)Node中間件代理

            原理:同源策略僅是瀏覽器需要遵循的策略,故搭建中間件服務器轉發請求與回應,達到跨域目的,

/* server1.js 代理服務器(http://localhost:3000)*/
const http = require('http')

// 第一步:接受客戶端請求
const server = http.createServer((request, response) => {
  
// 代理服務器,直接和瀏覽器直接互動,需要設定CORS 的首部欄位
  response.writeHead(200,{   
		'Access-Control-Allow-Origin':'*',   
    'Access-Control-Allow-Methods':'*',    
    'Access-Control-Allow-Headers':'Content-Type'  
	})
  
// 第二步:將請求轉發給服務器
	const proxyRequest = http.request({
        host:'127.0.0.1',
        port:4000,
        url:'/',
        method:request.method,
        headers:request.headers      
	},
  serverResponse =>{
   // 第三步:收到服務器的回應
        var body = ''
        serverResponse.on('data', chunk =>{
          body += chunk        
				})
        serverResponse.on('end',()=> {
          console.log('The data is '+ body)
          
// 第四步:將回應結果轉發給瀏覽器
          response.end(body)      
				})     
	})
  .end()
  })

server.listen(3000,()=>{console.log('中間件服務器地址: http://localhost:3000')})


// server2.js(http://localhost:4000)
const http = require("http");
const data = https://www.cnblogs.com/stjerne/p/{ title:"fontend", password: "123456" };
const server = http.createServer((request, response) => {
    if (request.url === "/") {
        response.end(JSON.stringify(data));
    }
});
server.listen(4000, () => {
    console.log("The server is running at http://localhost:4000");
});

        (4)nginx反向代理

            原理:類似Node中間件服務器,通過nginx代理服務器實作,

            實作方法:下載安裝nginx,修改配置,

21. 實作繼承的方法有哪些???

    實作繼承的方法有:

        (1)class+extends繼承(ES6)

//類模板
class Animal {
  constructor(name){
    this.name = name
  }
}
//繼承類
class Cat extends Animal{//重點,extends方法,內部用constructor+super
  constructor(name) {
    super(name);
    //super作為函式呼叫時,代表父類的建構式
  }//constructor可省略
  eat(){
    console.log("eating")
  }
}

        (2)原型繼承

//類模板
function Animal(name) {
  this.name = name; 
}
//添加原型方法
Animal.prototype.eat = function(){
  console.log("eating")
}

function Cat(furColor){ 
   this.color = color ;
};
//繼承類
Cat.prototype = new Animal()//重點:子實體的原型等于父類的實體

        (3)借用建構式繼承

function Animal(name){
	this.name = name
}
function Cat(){
	Animal.call(this,"CatName")//重點,呼叫父類的call方法
}

        (4)寄生組合式繼承(重點)

22. DOM事件模型和事件流?

    DOM事件模型包括事件捕獲(自上而下觸發)與事件冒泡(自下而上觸發,ie用的就是冒泡)機制,基于事件冒泡機制可以完成事件代理

事件捕獲
在這里插入圖片描述
事件冒泡
在這里插入圖片描述

    DOM事件流包括三個階段事件捕獲階段、處于目標階段、事件冒泡階段,

23. EventLoop事件回圈是什么?

    js是一門單執行緒的需要,它的異步操作都是通過事件回圈來完成的,整個事件回圈大體由執行堆疊、訊息佇列和微任務佇列三個部分組成,

    同步代碼會直接在執行堆疊中呼叫執行,

    定時器中的回呼會在執行堆疊被清空且定時達成時推入執行堆疊中執行,

    promiseasync異步函式的回呼會被推入到微任務佇列中,當執行堆疊被清空且異步操作完成時立即執行,

24. require/import之間的區別?

    (1)require是CommonJS語法,import是ES6語法;

    (2)require只在后端服務器支持,import在高版本瀏覽器及Node中都可以支持;

    (3)require引入的是原始匯出值的復制,import則是匯出值的參考;

    (4)require時運行時動態加載,import是靜態編譯;

    (5)require呼叫時默認不是嚴格模式,import則默認呼叫嚴格模式.

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/243801.html

標籤:JavaScript

上一篇:css筆記:回應式、媒體查詢

下一篇:JavaScript--總結三(陣列和函式)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more