@前端

動態 列表
@lewyon

JavaScript中async和await的使用以及隊列問題

宏任務和微任務的隊列入門知識,可以參考之前的文章: JavaScript的事件循環機制 宏任務和微任務在前端面試中,被經常提及到,包括口頭和筆試題 async await概念 async 使用async關鍵字聲明的函數,是AsyncFunction構造函數的實例,在async函數體內,可以使用await接收promise實例 async和await關鍵字,在開發過程中,可以簡潔地去做

lewyon 頭像

@lewyon

昵稱 程序猿布歐

@qinglong_62898aa51988d

為什麼 shift 比 pop 慢?JS 中隊列的實現

我們知道在 JS 中,刪除數組元素有兩個方法:pop 與 shift,分別可以刪除末尾與開頭的元素。 然而同樣是刪除元素,它們的執行時間確實不同的。 當數組項目較多時,shift 的執行時間明顯長於 pop。 const test = (arrLength) = { let arr1 = [] console.time(`${arrLength}-arr1`) for (let i =

@wuyagege

每日算法題--- 爬樓梯(利用JS實現)

假設你正在爬樓梯。需要 n 階你才能到達樓頂。 每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢? 示例 1: 輸入:n = 2 輸出:2 解釋:有兩種方法可以爬到樓頂。 1. 1 階 + 1 階 2. 2 階 示例 2: 輸入:n = 3 輸出:3 解釋:有三種方法可以爬到樓頂。 1. 1 階 + 1 階 + 1 階 2. 1 階 + 2 階 3. 2 階 + 1 階

wuyagege 頭像

@wuyagege

昵稱 雲綺棠兮

@tinyang

js遞歸遍歷數組並判斷數組中的每一項如果都不為空則返回true,只要有一項為空則返回false

js遞歸遍歷數組並判斷數組中的每一項如果都不為空則返回true,只要有一項為空則返回false。一開始看到這樣的場景我就覺得很簡單沒難度,可真正上手才發現並不那麼簡單,而且想要讓代碼健壯就又複雜了些。於是經過一個小時的努力加不斷修改、增補,總算實現了自己想要的一個方法。 代碼如下: const isArrayEmpty = arr = { if (!Array.isArray(arr) ||

tinyang 頭像

@tinyang

昵稱 豫見世家公子

@jianer

多級數組Tree如何做搜索

兩種方案 1、數組打平,根據搜索字符在打平數組裏去filter出滿足條件的node節點,但此時被篩選的節點只有子節點,然後再通過被篩選出的子節點去找對應的父節點,然後拿到結果後轉成tree結構 優點:思路簡單,打平數組用了遞歸,好理解 缺點:找父節點的時候相對麻煩。 2、寫一個遞歸算法,滿足條件就返回tree 比如有一個簡單個tree const treeData = [ {

jianer 頭像

@jianer

昵稱 健兒

@fengkuangdejinju

瀏覽器的進程和線程

瀏覽器的進程和線程 前言   要理解瀏覽器的進程和線程,首先需要理解一句話:進程是CPU分配資源的最小單位,線程是CPU調度的最小單位。   應用程序在運行時,CPU會分配一塊可獨立運行的內存,即進程,他是應用程序運行的載體。進程一般由程序,數據集合和進程控制塊三部分組成。程序用於描述進程要完成的功能,是控制進程執行的指令集;數據集合是程序在執行時所需要的數據和工作區;程序控制塊包含進程的描述信息

fengkuangdejinju 頭像

@fengkuangdejinju

昵稱 瘋狂的金桔

@qiuzhisijiaoniannian

最後一次,搞懂CSRF攻擊!

完整閲讀本文大約需要5分鐘。 開始閲讀之前,先上一道面試題: CSRF攻擊和XSS攻擊之間,有什麼聯繫? 什麼是CSRF攻擊 CSRF攻擊即Cross-site request forgery,跨站請求偽造,直白來説就是惡意網站偽裝成用户,向被害網站發起操作請求。 為了方便理解,做了一張圖,攻擊流程如下: 用户登錄受害網站,瀏覽器把獲取的身份憑證保存在本地cookie中; 用户被誘導打開黑

qiuzhisijiaoniannian 頭像

@qiuzhisijiaoniannian

昵稱 前端私教年年

@musicfe

基於 GraphQL 的雲音樂 BFF 建設實踐

圖片來自:https://bz.zzzmh.cn/ 本文作者: cgt 背景: 如何解耦大前端與服務端的適配層依賴 談到 BFF,相信大家都不會太陌生,過去在雲音樂,前後端的協作架構一直維持比較傳統的前後端協作模式。各個端所需要的接口完全依賴服務端提供,服務端同學除了需要完成微服務的業務邏輯外,還需要針對前端頁面調度各個領域的微服務,根據前端的數據訴求進行一定程度的組裝和適配。 在年初

musicfe 頭像

@musicfe

昵稱 雲音樂技術團隊

@zaotalk

【Node 連載 3/9】如何高效開發表現層 Node.js 應用

本文是 2021 年 12 月 26 日,第三十五屆 - 前端早早聊【前端搞 Node.js】專場,來自預測科技的技術總監 —— 芋頭的分享。感謝 AI 的發展,藉助 GPT 的能力,最近我們終於可以非常高效地將各位講師的精彩分享文本化後,分享給大家。(完整版含演示請看錄播視頻):https://www.zaozao.run/video/c35 完整版高清 PPT 請添加小助手「zzleva」獲取

zaotalk 頭像

@zaotalk

昵稱 前端早早聊

@jueqiangdeqianbi

優化開發流程:頂級 GraphQL 工具推薦

GraphQL 工具 本文章,會列舉一些好用的 GraphQL 工具,他們可以大大提升你在開發中使用 GraphQL 的效率哦! Prisma 你可以這麼理解,Prisma 是一個 ORM 的庫,讓你使用 GraphQL 查詢時,可以使用對象的形式去查詢,而不需要使用查詢語句去查詢,非常方便,而且 Prisma 還擁有以下特點: Prisma 支持很多數據庫,比如 Mysql、Postgre

jueqiangdeqianbi 頭像

@jueqiangdeqianbi

昵稱 倔強的鉛筆

@jueqiangdeqianbi

為什麼 GraphQL 被認為是 Redux 的更好選擇?

近幾年來,互聯網技術趨向於採用前端 JavaScript 框架來構建更好的網頁和移動應用用户體驗。這種變化真的很棒🔥,我個人非常喜歡這些框架給我們帶來的靈活性。 但是,這種靈活性是否已經過頭了呢… 為了真正理解這種情況,我們不妨回顧一下,在 JavaScript 框架誕生之前,應用是如何構建的。 ⏳ JavaScript 出現之前的時代… 在最初的幾個前端框架(最著名的包括 Angular

jueqiangdeqianbi 頭像

@jueqiangdeqianbi

昵稱 倔強的鉛筆

@kevinzhw

GraphQL在現代Web應用中的應用與優勢

GraphQL是一種現代的API查詢語言,它在現代Web應用中得到了廣泛的應用,因為它提供了一種高效、靈活且強大的方式來獲取數據 GraphQL基礎快速應用示例: 1. 後端設置(使用graphql-yoga) 首先,我們需要創建一個GraphQL服務器。安裝graphql-yoga並創建一個簡單的GraphQL schema: npm init -y npm install graphql yo

kevinzhw 頭像

@kevinzhw

昵稱 天涯學館

@tianzhich

【譯】繼承與原型鏈(Inheritance and the prototype chain)

前言 原文來自MDN JavaScript主題的高階教程部分,一共5篇。分別涉及繼承與原型、嚴格模式、類型數組、內存管理、併發模型和事件循環。本篇是第一部分,關於繼承和原型。 原文鏈接請點我 下面是正文部分: 對於熟悉基於類的編程語言(例如 Java 和 C++)的開發者來説,JavaScript 會讓他們感到困惑,因為 JS 的動態性以及其本身並不提供class的實現(ES2015 中提出的c

tianzhich 頭像

@tianzhich

昵稱 小志Chris

@hai2007

理解prototype和__proto__(繼承與原型鏈)

從關係圖中可以看出來,ECMAScript中創建一個對象是通過new構造函數實現的,而本質上來説這個對象其實是以構造函數的屬性prototype指向的對象為基本模板的,因此新對象的__proto__屬性表明了自己來源於誰。 prototype 該屬性用來指向創建一個對象的基本模板,默認指向new構造函數,也可以修改,或者通過改屬性為新對象添加屬性。 需要注意的是,該屬性只有函數才有。 //構造函

hai2007 頭像

@hai2007

昵稱 你好2007

@lewyon

JavaScript擴展原型鏈淺析

前言 上文對原型和原型鏈做了一些簡單的概念介紹和解析,本文將淺析一些原型鏈的擴展。 javaScript原型和原型鏈 http://lewyon.xyz/prototype.html 擴展原型鏈 使用new操作符 利用原型是對象的特性,實例化對象的時候,繼承多個構造函數的屬性和方法 兼容性:支持目前以及所有可想象到的瀏覽器 (IE5.5 都可以使用) function parent1(

lewyon 頭像

@lewyon

昵稱 程序猿布歐

@budebinglin

JavaScript 原型鏈詳解

繼續補檔,發現這塊內容其實蠻多的。後面估計還會有兩篇(怎麼還有兩篇啊喂!),分別是 JavaScript執行原理·補 和 JavaScript部分特性,這周不知道能不能搞定。 先看 JS 原型鏈吧。 JS 繼承機制設計 1994年,網景公司(Netscape)發佈了 Navigator v0.9,轟動一時。但當時的網頁不具備交互功能,數據的交互全部依賴服務器端,這浪費了時間與服務器資源。 網景公司

budebinglin 頭像

@budebinglin

昵稱 阿菇kinoko

@heiyanjing

AST語法樹增刪改查

AST 是 Abstract Syntax Tree 的縮寫,即 “抽象語法樹”.它是以樹狀的形式表現編程語言的語法結構. webpack 打包 JS 代碼的時候,webpack 會在我們的原有代碼基礎上新增一些代碼, 例如我們可以在打包JS 代碼的時候將高級代碼轉為低級代碼,就是通過 AST 語法樹來完成的 AST在線生成地址 babel插件查看使用地址 AST生成過程由源碼-詞法分

heiyanjing 頭像

@heiyanjing

昵稱 HeiYanjing

@thjjames

編寫babel的插件

前言 Babel 是一個通用的多功能的 JavaScript 編譯器,讓一些新版本的語法或者語法糖可以在低版本的瀏覽器上跑起來。 它有三個主要處理步驟 Parse - Transform - Generate。 在 Transform 轉換過程中通過將插件(或預設)應用到配置文件來啓用代碼轉換。 AST 編寫 Babel 插件非常複雜,需要有相當的基礎知識,在講插件之前必須得提起 AS

thjjames 頭像

@thjjames

昵稱 小皇帝James

@jdcdevloper

抽象語法樹AST必知必會 | 京東物流技術團隊

1 介紹 AST 打開前端項目中的 package.json,會發現眾多工具已經佔據了我們開發日常的各個角落,例如 JavaScript 轉譯、CSS 預處理、代碼壓縮、ESLint、Prettier 等。這些工具模塊大都不會交付到生產環境中,但它們的存在於我們的開發而言是不可或缺的。 Babel,Webpack,Vue-cli 和 EsLint 等很多的工具和庫的核心都是通過 Abstract

jdcdevloper 頭像

@jdcdevloper

昵稱 京東雲開發者

@feng_fanfan

前端工程師復健筆記-JavaScript 核心深度複習-Promise及有關函數

Promise 詳解及常用方法對比 1. Promise 原理詳解 1.1 Promise 基本概念 Promise 是 JavaScript 中用於處理異步操作的對象,它代表一個異步操作的最終完成(或失敗)及其結果值。 // Promise 的三種狀態 const promise = new Promise((resolve, reject) = { // Pending 狀態(進行中)

feng_fanfan 頭像

@feng_fanfan

昵稱 Feng_Fanfan

@emonzan

JS 實現 Angular slider 組件

需求描述 需求:根據傳入的動態數組生成一個節點數為數組長度的 slider 組件。要求節點直接長度一致,但是顯示的值為傳入數組的值。 示例: 傳入值為[5], 因為只有一個值,slider 無法拖動,顯示如下 傳入值為[5,10,20,30,40,50,55], 數值之間差值不一定相等,顯示如下 實現邏輯: UI: 先畫一條線作為滑動條,再根據傳入數

emonzan 頭像

@emonzan

昵稱 Emon

@bianchengsanmei

Web Components系列(一) —— 概述

前言 如果我們選擇不使用任何框架的情況下來進行前端開發,那麼針對一個完整的網頁,我們需要開發以下代碼: HTML 代碼 CSS 代碼 JavaScript 代碼 就幾年之前來説,HTML 部分的代碼基本不存在複用的可能,這就導致我們可能需要開發大量重複的 HTML 代碼,即使使用 CV 法,代碼的冗餘卻是不可避免的。 Web Components 誕生的背景 近幾年,我們在使用前端框架(

bianchengsanmei 頭像

@bianchengsanmei

昵稱 編程三昧