自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 收藏
  • 关注

原创 nodejs技术摘要

目录一、认识nodejs二、nodejs基本概念简介1. nodejs与npm2. nodejs交互式解释器(REPL)3.一、认识nodejsNode.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境(引自百度百科)。我们都知道,浏览器是客户端的JavaScript运行环境,相对的,nodejs就是服务端的JavaScript运行环境。我们说nodejs是服...

2020-02-02 12:14:48 1887

原创 手写经典游戏 - FlappyBird

目录一、FlappyBird简介二、技术铺垫1. canvas(画布)2. 基于setInterval的动画实现三、代码实现1. 定义画布2. 初始化参数3. 首绘4. 启动游戏5. 连续的帧计算总结一、FlappyBird简介FlappyBird(飞扬的小鸟)是由越南独立游戏开发者Dong Nguyen所开发的一款经典小游戏,如果你没有听说过这款游戏,那么请看下图:我想大部分人都有一种熟...

2020-01-24 10:52:32 2461

原创 webpack概念简介

目录一、webpack概述1. 什么是webpack?2. 为什么要使用webpack?二、webpack相关概念1. 入口(entry)2. 出口(output)3. 加载器(loader)4. 插件(plugin)三、补充 - 热更新原理总结一、webpack概述1. 什么是webpack?webpack被定义为现代 JavaScript 应用程序的静态模块打包器(module bund...

2020-01-18 18:17:19 6869

原创 ES6之Class原理分析

目录一、概述二、class的实现1. 基本原理2. class语法规范(1). 取值函数(getter)和存值函数(setter)(2). 属性表达式(3). class表达式(4). this的指向三、class的继承1. 继承的概念2. 继承的基本原理3. 继承的相关语法(1). super关键字(2). 原生构造函数的继承总结一、概述遥想ES6刚刚问世时,不少曾经从事过后端开发的程序员都...

2020-01-12 19:37:19 2132 1

原创 跨域解决方案汇总

目录一、跨域和同源策略1. 什么是跨域?2. 同源策略3. 同源策略带来的问题二、跨域解决方案1. iframe通信类(1). 修改document.domain(2). 设置location.hash(3). 设置window.name(4). postMessage2. 跨域请求类(1). JSONP(2). 跨域资源共享(CORS)(3). nginx代理(4). nodejs中间件(5)....

2020-01-05 20:39:41 1273

原创 ES6之Reflect和Proxy

目录一、Reflect1. 概述二、Proxy一、Reflect1. 概述设计Reflect主要有以下四个目的:将Object上属于语言内部的方法部署到Reflect,并且以后新增的语言内部方法只会部署到Reflect上。如Object.defineProperty在ES6中可以通过Reflect.defineProperty调用,并且前者在之后的版本中将不再被推荐。规范某些Objec...

2019-12-28 18:22:15 1654

原创 ES6之Generator和async

目录一、概述二、Generator函数1. 基本原理2. 使用语法三、async函数一、概述Generator和async是ES6提供的新的异步解决方案。Generator函数可以理解为一个可以返回多个值的状态机,它的返回值是一个遍历器对象(Iterator),每次调用该遍历器的next方法就会输出一个值。当有多个异步逻辑需要按序执行时,只要在完成一个异步逻辑时调一次next方法即可。不过想...

2019-12-22 17:59:11 1443 1

原创 ES6之Set和Map

目录一、Set1. Set对象的构造2. Set的操作方法3. Set的遍历方法二、WeakSet三、Map1. Map的基本原理2. Map的操作方法3. Map的遍历方法4. Map与其他数据结构的转换(1) Map转为数组(2) 数组转为Map(3) Map转为对象(4) 对象转为Map(5) Map转为JSON(6) JSON转为Map四、WeakMap一、SetSet是ES6新增的一...

2019-12-15 17:12:46 1137

原创 js基础之自定义事件

目录一、什么是事件?二、自定义事件的实现1. 生成事件对象2. 监听事件3. 触发自定义事件三、自定义事件的用途总结一、什么是事件?事件是浏览器与用户交互的主要方式。举例来说,当用户点击页面上的一个按钮,对浏览器来说,就是在这个按钮上触发了一个“点击事件”。浏览器会去执行开发者为这个“点击事件”定义的回调函数,以此来响应用户的操作。也就是说,浏览器通过“事件”,来感知用户操作,然后执行开发者...

2019-12-10 20:37:05 951

原创 ES6之遍历器Iterator

目录什么是遍历器?什么是遍历器?在ES5中,我们最常使用的“集合”类数据结构主要是数组(Array)和普通对象(Object),ES6在此基础上新增了Map和Set。我们知道,这些“集合”类元素都是由一系列的成员构成的,那么一个非常常见的需求就是如何依次访问“集合”中的每一个成员。在ES5中,数组成员主要通过for循环或原型方法forEach等来遍历,而对象成员则没有方法直接遍历。ES6为数...

2019-12-08 17:50:48 1812 2

原创 ES6之Symbol详解

目录一、什么是Symbol?二、Symbol的作用三、Symbol的语法规范1. 基本语法2. Symbol属性的遍历3. Symbol.for(),Symbol.keyFor()四、内置的Symbol值1. Symbol.hasInstance2. Symbol.isConcatSpreadable3. Symbol.species4. Symbol.match/replace/search/...

2019-11-30 19:37:25 20834 10

原创 让读写文档变得更简单 - Markdown

目录Markdown简介Markdown简介如果你使用了很久的github,却不知道什么是Markdown,那你真的非常有必要了解一下了。Markdown是一种轻量级标记语言,类似于HTML,由约翰·格鲁伯(英语:John Gruber)创建于2004年。Markdown 致力于使阅读和创作文档变得容易,因此可读性是它的最高准则。为此,Markdown不使用任何标签和格式化语法,而是仅仅使用...

2019-11-24 17:18:28 683

原创 前端异步方案之Promise(附实现代码)

一、基本原理一个Promise对象可以理解为这样一个状态机,它(通常)接收一个异步任务作为输入,然后去执行这个异步任务,根据异步任务的执行结果来改变自身的状态,并保留这个执行结果 。这个状态机总共有三种状态:pending(异步任务执行中)、fullfilled(执行成功)和rejected(执行失败)。在异步任务执行完之前,状态机处于pending状态;一旦任务执行成功,状态就会转为full...

2019-11-16 19:26:40 2558 1

原创 js基础之探秘Array的原型方法

如果现在需要用js生成[0, 2, 4, 6, 8, …, 100]这样一个数组,你第一时间想到的会是下面的写法吗?var arr = new Array(51);//使用临时变量保存数组长度,可以有效避免每次循环都计算数组长度var len = arr.length; for(var i = 0; i < len ; i++){ arr[i] = i * 2;}或者你会...

2019-11-10 18:35:16 1536

原创 git简介

Git相关概念Git与Github、GitLab作为目前最流行的分布式版本管理工具,git从诞生伊始就备受关注。虽然这与它的作者Linus(大名鼎鼎的Linux操作系统的作者)的个人影响力有一定的关系,但更重要的是,git无论是在设计理念、性能、安全性还是易用性等方面都有着传统的版本管理工具无可比拟的优势。除此之外,它还是完全开源和免费的。很多对Git完全不了解的同学可能会误以为Git和Gi...

2019-11-03 19:25:18 1439

原创 引入第三方图标库,并在前台罗列图标

几乎从第一代浏览器开始,图片就是前端页面中不可或缺的一个元素。但是我们知道,图片的体积往往很大,传输速度较慢。如果一个页面有很多的图片,网页性能就会直线下降。并且图片过度放大时会失真(这里指非矢量图片),显示效果很不好。矢量图片...

2019-11-01 22:51:48 1424 1

原创 el-upload上传文件时返回的字符串异常

问题描述在使用element-ui的文件上传插件进行资源上传时,后端所返回的数据是一个形如“3297799991516386308”的字符串,也就是资源id。但是在on-success回调函数中得到的response却是3297800280615081000。显然这个结果并不是随机生成的,因为两者有着明显的相似性。并且这个response并不是字符串,而是一个数字。将这个id传到后台时就会出现...

2019-10-31 19:08:09 3396

原创 CSS3之色彩与渐变

长久以来,在网页中使用最为广泛的色彩模式就是rgb模式。rgb模式通过r(red,红色)、g(green,绿色)和b(blue,蓝色)三原色的混合来构成其他颜色,每种原色的混合比例用一个0~255之间的数值表示,0表示不混入该颜色,255表示混入纯色。...

2019-10-26 19:05:28 3424 1

原创 CSS3之2D与3D转换

在CSS3中新增了很多关于2D和3D转换的标准,它允许将页面元素在2D和3D空间内进行移动、缩放、旋转、扭曲等。所谓的2D转换,指的是元素可以在平面内进行位置或形状的转换,而3D转换指的是元素可以在三维空间(也就是立体空间)内进行位置或形状的转换。我们先来看一下几个2D和3D转换的简单效果(文末附带相关代码,感兴趣的可以新建一个txt文件,将代码粘进去保存,然后将文件后缀改为html,双击运行即...

2019-10-20 20:23:02 1732

原创 JavaScript的函数式特性

前言作为一门面向对象的语言,JavaScript本身却具有明显的函数式语言特征。而这也是很多JavaScript的支持者钟爱它的原因之一 – 函数式特性为这门语言带来了极大的灵活性。高阶函数、偏函数、函数柯里化、闭包这些概念都不同程度地依赖JavaScript的函数式特性。下面我们就来了解JavaScript的函数式特性。什么是函数式特性?在严格的函数式编程语言中有一条原则:函数是一等公民。...

2019-10-14 18:28:13 1045

原创 js基础之事件捕获与冒泡原理

想要了解什么是事件捕获与冒泡,需要先了解什么是事件。什么是事件?我们知道,在前端开发中,JavaScript负责定义网页的“行为”。这里所说的“定义”,其实指的是开发者可以通过JavaScript语言向浏览器描述一些规则,浏览器按照这些规则与用户进行交互。比如开发者希望当用户点击页面上某个按钮的时候,就弹出一个窗口,显示特定的内容。而当用户真正点击这个按钮的时候,浏览器将按照开发者定义的这个规...

2019-10-07 17:01:37 1712 1

原创 HTML5之原生拖拽

随着互联网的发展,人们对前端体验的要求不断提高,过去纯点击式的网页操作难免让人感到厌烦。为了使用户操作更简便,HTML5中新增了一项功能 - 拖拽,它允许用户以鼠标拖拽的方式来操作网页,这更加符合人们的操作习惯。实际上该功能更多的是依赖JavaScript API的支持。除了支持在浏览器内部拖拽元素外,该接口还支持从浏览器外部向浏览器内拖拽文件,它借助的是操作系统的支持以及HTML5新增的另外一个...

2019-09-29 11:42:37 3726 5

原创 Vue源码笔记之虚拟DOM

什么是虚拟DOM?简单来说,虚拟DOM就是真实DOM树的一种JavaScript表达。之前在浏览器(基于Chromium)运行机制剖析这篇文章介绍过,浏览器通过HTML引擎来解析HTML文档,然后生成一棵DOM树。JavaScript可以通过DOM接口操作这棵DOM树,从而修改页面结构。但是DOM树本身并不是由JavaScript来描述的,而且它的体积通常十分庞大,再加上操作DOM经常导致网...

2019-09-22 22:53:48 1521 3

原创 Vue源码笔记之编译器

什么是编译器?如果单从Vue的角度来说,template(模板)并没有存在的必要。在Vue中,真正要使用的是从template编译生成的渲染函数,利用它可以直接生成虚拟DOM。实际上Vue向我们提供了直接书写渲染函数的能力(这样就可以不用写模板,也不需要编译器)。但是渲染函数写起来往往不那么直观,如果是一个很复杂的DOM结构,开发者很难知道如何去书写这个渲染函数。为了降低开发者学习Vue的心智负...

2019-09-14 17:48:29 2852

原创 Vue源码笔记之响应式系统

什么是响应式系统?Vue的响应式系统是一个精心搭建的监控系统,它负责监测项目中的数据变化,然后通知对该数据“感兴趣”的订阅者进行相关操作。我们分别来理解“数据”、“感兴趣”以及“订阅者”这三个关键词。这里指的数据,就是options中的data配置项,它通过以下两种方式定义://单文件中使用Vuevar app = new Vue({ el: "#app", data: { ......

2019-09-07 19:02:30 2359 1

原创 Vue源码笔记之初始化

概述本文主要分两部分:Vue自身的构造。主要是关于如何向Vue的原型prototype添加方法。Vue实例的初始化。即new Vue({ … })时执行的操作。Vue自身的构造过程1. 定义构造函数当我们像下面一样引入Vue.js文件时:<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></sc...

2019-08-31 17:04:34 1402

原创 Vue源码笔记之项目架构

终于开启了Vue源码的阅读之旅!虽然只有三个月左右的使用经验,阅读源码时会比较吃力,但是无所谓,当我们欣赏一件“艺术品”时,重点在于是否用心去欣赏,而不在于欣赏到什么程度。本阅读笔记基于Vue 2.6.10,主要记录了自己对Vue源码的一些理解,并参考了刘博文著的《深入浅出Vue.js》一书以及csdn博主恰恰虎的Vue源码学习系列文章。由于能力有限,笔记中对源码的认识可能不够深入,如果感兴趣,...

2019-08-24 16:43:40 1749 1

原创 为什么说jQuery老了?

很多人都说jQuery老了,我本人也承认这一点。回想十几年前,jQuery的出现曾经席卷前端领域,让混乱的前端开发归为统一,同时广大前端开发者也第一次拥有了一件真正趁手的“兵器”。十几年过去了,这件“兵器”慢慢地钝了,在新涌现的“轻武器”面前显得非常笨重,于是前端开发者们纷纷“拥抱新技术”,有些人甚至对jQuery这个“老古董”嗤之以鼻。不过别忘了,即使是“小学课本上的那些文章”,仍然是中国文...

2019-08-17 17:07:13 1967 3

原创 http与https原理分析

概述http(HyperText Transfer Protocol,超文本传输协议)协议是互联网中位于协议栈顶层最重要的网络协议之一,它规定了如何在互联网中传输超文本(含有指向其它文本文件链接的文本),而超文本是互联网中数据传输的主要形式。https = http + secure(安全层),https是由http协议加上安全传输协议SSL/TLS组成的,用于在互联网中安全地传输数据。下面...

2019-08-11 18:45:40 1346

原创 vue中使用mockjs模拟后台数据

概述以前的web开发中,前后端是紧密耦合在一起的,脱离了后端的前端几乎无法测试。两者的过度依赖不仅大大地提高了团队的沟通成本,还严重拖慢了项目的开发进度,非常不利于web项目的开发。于是前后端分离逐渐成为一种广为认可的开发模式。但在实际的web开发中,前后端的进度是很难做到实时同步的,因此经常会出现前端无接口可调的情况,这样前端开发很容易陷入阶段性停滞的泥潭。为了将前后端进一步解耦,前端出现了...

2019-08-03 14:40:03 2703

原创 js基础之六种继承方式

概述在JavaScript中,存在六种继承模式,分别是基本继承(即前文js基础之原型链提到的最原始的方式,暂未查到官方称谓)、借用构造函数、组合继承、原型式继承、寄生式继承和寄生组合式继承。其中组合继承是基本继承和借用构造函数的组合版本,也是最常用的继承;原型式继承是基本继承的“干净”版本(只继承原型);寄生式继承是原型式继承的工厂化版本;寄生组合式继承是组合继承融入原型式继承思想后的优化版本,...

2019-07-27 13:55:16 1532 1

原创 js基础之原型链

概述什么是原型链?简单来说,就是JavaScript对象的继承链。其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法(引用自JavaScript高级程序设计)。对于一门面向对象的语言来说...

2019-07-21 20:08:40 979 2

原创 js基础之图片懒加载

概述什么是图片的懒加载?简单来说就是尽可能晚地加载图片(这里的懒,指的就是一件事只有到不得不做的时候才去做)。举个例子,当我们在逛淘宝查看商品列表时,肯定经常遇到这种情况:如果连续向上滑动商品列表,很快就会停住(就像到了列表底部一样)。这时候如果继续向上滑动,就会出现 “加载中” 的提示,随后展示出更多的商品。这就是一个典型的懒加载案例。整个商品列表并没有在进入页面时全部加载进来,而是先加载一...

2019-07-14 20:11:19 621 1

原创 V8引擎的内存管理分析

概述作为目前最受欢迎的JavaScript引擎,V8引擎从一出现就因其出色的性能而备受关注,更是帮助Chrome确立了浏览器霸主的地位。从浏览器结构来看,V8引擎位于Chrome最底层的webkit中(关于浏览器结构,请参考之前的一篇文章:浏览器(基于Chromium)运行机制剖析),用于替换webkit默认的JavaScript引擎 - JavaScriptCore,实现对JavaScript...

2019-07-08 11:26:21 2569

原创 js基础之setTimeout与setInterval原理分析

基本原理setTimeout(func, delay, args):设置超时调用,经过delay时间后,将func函数加入到执行队列中准备调用。如果队列为空,立即执行该函数,否则等待线程空闲再执行。setInterval(func, interval, args):设置...

2019-07-06 17:13:10 5905

原创 浏览器(基于Chromium)运行机制剖析

浏览器运行机制解析(以Chromium为例)当你打开浏览器,在地址栏输入一个网址(如https://www.baidu.com),按下回车,浏览器很快就会为你加载出你想要的页面。那么你有没有想过,从你按下回车,到看到最终的页面,浏览器都做了哪些工作(不管你认为它是简单还是复杂,它可能都比你想象的复杂的多!)?下面我们就从浏览器完整加载和渲染一个网页的过程入手,一步步介绍浏览器的运行机制。1....

2019-06-29 20:18:27 4277

原创 js基础之函数的节流与防抖

函数节流和防抖的原理及用途函数节流 (throttle)基本思想:当一个函数在短时间内频繁触发时,通过超时调用来降低函数的执行频率。常见用途:函数防抖(debounce)基本思想:当一个函数在短时间内频繁触发,且触发间隔小于设定的阈值时,暂时不执行该函数,只在触发间隔超过一定的时间后才执行该函数。...

2019-06-28 19:35:03 766 1

原创 前端发展历程与技术应用概述

前端发展历程与技术应用概述前言随着web2.0时代的到来,前端在web开发中所占的比重越来越大,专注于内容呈现和网站交互的前端开发人员也逐渐展现出其不可替代性。前端所涉及的领域甚至不限于web应用,如HTML5技术允许我们开发原生的移动应用;React Native、Flutter等跨平台框架可以用于开发跨平台的移动应用;还有近些年相当流行的微信/支付宝小程序等。此外,随着微软的新项目Reac...

2019-06-23 19:44:27 7664 3

原创 使用原生js实现简单动画效果

使用原生js实现简单动画效果我们知道,借助jQuery提供的animate方法,我们可以很容易实现一些常见的js动画效果。而对于颜色等无法用数值直接表示的样式,我们可以通过引入一些jQuery插件来实现。但是随着前端组件化开发的流行,jQuery大量的DOM操作已显得十分多余,正在逐渐从前端技术栈中被淘汰。那么如何使用原生js来实现类似于jQuery中的动画效果呢?下面我们将使用原生js实现一个...

2019-06-22 19:44:57 17321 10

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除