自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 利用node.js中的axios模块实现爬虫

在写代码之前,我们先简单了解一下Axios是什么,Axios是一个基于Promise的HTTP库,可以用在浏览器和node.js中,它具有以下特征:从浏览器中创建XMLHttpRequest支持Promise API客户端支持防止CSRF提供了一些并发请求的接口从node.js创建http请求拦截请求和响应转换请求和响应数据取消请求自动转换JSON数据...

2021-11-09 21:00:56 2396

原创 nodejs中module.exports和exports的区别

CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。为了方便,Node为每个模块提供一个exports变量,指向module.exports。这等同在每个模块头部,有一行这样的命令。var exports = module.exports;同时,在该模块中,this也指向exports:console.log(exports =

2021-10-30 14:35:28 172

原创 前端中的网络知识---http/https协议

一、基本信息–了解HTTP互联网基础结构发展分为三个阶段。第一阶段:从单个网络ARPANET向互联网发展的过程。1983 年, TCP/IP 协议成为 ARPANET 上的标准协议,使得所有使用 TCP/IP 协议的计算机都能利用互连网相互通信。我们常说的以大写字母 “I” 开始的的 Internet(互联网或因特网)是一个专用名词,它指当前全球最大的、开放的、由众多网络相互连接而成的特定计算机网络,它采用 TCP/IP 协议族作为通信的规则,且其前身是美国的 ARPANET。第二阶段:建成了三级结

2021-10-30 11:24:35 458

原创 尝试实现Set和Map常用方法源码

在ES6中出现了两种比较常见的数据类型结构,也就是本文所要说到的Set和Map。Set数据结构Set简介Set中的成员总是唯一的,没有重复的值,这里要注意,因为Set中的值总是唯一的,所以需要判断两个值是否相等,在ECMAScript规范的早期版本中,这不是基于和===操作符中使用的算法相同的算法。具体来说,对于 Set s, +0 (+0 严格相等于-0)和-0是不同的值。然而,在 ECMAScript 2015规范中这点已被更改,也就是在ES6之后,+0和-0被识别为相等的值。另外,NaN和Na

2021-10-23 20:03:33 105

原创 ES6中的Promise

在了解Promise之前,我们需要先说一说回调地狱。那么什么是回调地狱呢? 简单来说就是在JS中, 某个异步操作需要等到之前的异步操作之后, 这种情况下, 无论回调是事件还是其他函数, 都会陷入不断的回调。<script> function foo(){ console.log('恭喜你中奖了!') } setTimeout(() => { const rate = Math.random(

2021-10-16 11:39:57 77

原创 JS实现函数柯里化

函数柯里化就是将多参简化为单参数的一种技术方式,其最终支持的是方法的连续调用,每次返回新的函数,在最终符合条件或者使用完所有的传参时终止函数调用。那么柯里化究竟有什么用呢 ? 按照定义,柯里化是可以让我们的代码更加简洁的,例如我们对一个函数传参,如果有某一个参数的值是固定的,那么如果我们每次在调用这个函数的时候都重复去传入这个值,这样就会很麻烦:同样的折扣,对于不一样的商品计算折扣后的价格,按照原来的写法,我们得这样写:function getPrice(price, discount) {

2021-10-12 20:29:53 190

原创 JS的常见的几种错误类型

ReferenceError(引用错误)对象代表当一个不存在的变量被引用时发生的错误,简单说来就是在作用域中找不到。function sayHi(){ console.log(age); let age = 21; } sayHi()运行时由于let声明的变量不会先被提升(暂时性死区),所以在前面打印的时候会有此报错:2、TypeError对象用来表示值的类型非预期类型时发生的错误,简单说就是在作用域中找到了,但是用它做了它不可能做的事情。 .

2021-10-10 12:28:43 533

原创 get和post请求的区别

浏览器对URL的长度有限制,所以GET请求不能代替POST请求发送大量数据RFC 2016 中明确对 url 的长度并没有限制。不过虽然在RFC中并没有对uri的长度进行限制,但是各大浏览器厂家在实现的时候限制了URL的长度:IE浏览器对URL的最大限制为2083个字符Firefox (Browser):对于Firefox浏览器URL的长度限制为65,536个字符。Safari (Browser):URL最大长度限制为 80,000个字符。Opera (Browser):URL最大长度限制为1.

2021-10-08 17:31:44 117

原创 jQuery的attr、prop及data方法

attr()attr() 方法设置或返回被选元素的属性和值。当该方法用于返回属性值,则返回第一个匹配元素的值。当该方法用于设置属性值,则为匹配元素设置一个或多个属性/值对。prop()prop() 方法设置或返回被选元素的属性和值。当该方法用于返回属性值时,则返回第一个匹配元素的值。当该方法用于设置属性值时,则为匹配元素集合设置一个或多个属性/值对,返回值为匹配的Jquery对象。仅看attr()和prop()两种方法的作用时,是很相似的,刚开始看的时候也总是分不清两者的区别,所..

2021-10-08 17:25:56 341

原创 浏览器线程和进程

进程是cpu资源分配的最小单位(是能拥有资源和独立运行的最小单位),线程是cpu调度的最小单位(线程是建立在进程的基础上的一次程序运行单位,一个进程中可以有多个线程),不同进程之间也可以通信,不过代价较大。而JS是单线程异步的,不同线程的实现是浏览器来完成的。在浏览器中包含JS引擎线程(主线程,负责调度子线程)、GUI渲染线程(负责渲染浏览器页面,包括解析HTML、CSS,构建DOM树)、事件监听线程(完成事件处理)、计时器线程(setTimeout/setInterval)、网络线程(负责处理http请

2021-10-08 09:19:27 99

原创 异步加载的几种方法及手动异步加载的封装

defer属性:IE4.0就出现。defer属声明脚本中将不会有document.write和dom修改。浏览器会并行下载其他有defer属性的script。而不会阻塞页面后续处理。也就是在async属性:HTML5新属性。脚本将在下载后尽快执行,作用同defer,但是不能保证脚本按顺序执行。他们将在onload事件之前完成。只适用于外部脚本文件,并告诉浏览器立即下载文件,与defer不同的是,标记为async的脚本并不保证按照指定它们的先后顺序执行。...

2021-10-07 20:42:47 109

原创 防抖与节流

防抖和节流都是用于防止函数的多次调用。当我们在短时间内重复触发某一事件时,若函数被反复执行,当浏览器的响应速度跟不上触发频率时,会出现延迟,假死或卡顿的现象,这会导致用户的体验感变差。所以现在虽然我遇到的不多,但是了解这两个技术的实现还是很必要的。防抖(debounce)防抖的实现策略是触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间。比如你点击button按钮,1秒内就算你快速点击无数次,但他也还是只触发一次。在实现时,会在每次触发事件时都取消之前的延时调用方

2021-10-07 16:32:15 156

原创 JS实现深度克隆

我们在对数据进行克隆时会遇到两种数据类型,即基本数据类型和引用数据类型.对于基本数据类型,不需要讨论深度克隆和浅度克隆的问题;而对于引用数据类型,我们需要根据需要对其进行浅克隆(简单的地址引用操作)或深克隆(不只是引用地址的赋值,而是将原本的数据克隆一份,让其不再对原本的数据产生影响)....

2021-09-25 19:59:26 2326

原创 JS数组的几种方法

forEach()forEach方法参数为一个函数,对数组中的每个值执行一次此函数,不会改变原数组.语法为:arr.forEach(callback(currentValue,index,arr)currentValue为当前进行操作的元素,index:当前进行操作的元素的下标,为可选参数arr:当前元素所属的数组,为可选参数用forEach遍历普通数组 var arr = [1,2,3,4] arr.forEach(function(ele){ .

2021-09-17 20:43:42 124

原创 JavaScript常用内置对象及方法

Arrayarr.push()用于在数组末尾追加一个或多个数据,console.log(arr.push())打印得到添加数据后数组的长度。arr.unshift()用于在数组头部添加一个或多个数据,console.log(arr.unshift())打印得到添加数据后数组的长度。arr.shift()用于删除数组最前面的数据,括号里填的值无任何影响,返回值为被删除掉的数据。arr.pop()用于删除数组末尾的数据,返回值为被删除掉的数据。arr.splice()通过索引位置删除、添.

2021-08-07 16:00:30 179

原创 查找并输出数组中出现频率最高的数字

需要先利用对象来存储数字以及其出现的次数,之后可以用对象或者两个变量来存储出现频次最高的数字及其对应的频次。先定义一个数组,遍历这个数组然后将其数据存储在一个新的对象中。// 先定义一个数组var arr = [1,1,2,3,1,2,3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,1,3,4,2,5,1,2,2,1,3,5,6,6,1,2,1,2,2,2,2,2,2,2,2]// 定义一个对象用来记录数据var obj = {}for(var i = 0;i &

2021-08-07 09:38:45 2938

原创 关于Flexible Box的一些总结

对于弹性盒子相关属性的整理

2021-07-28 20:16:41 73

空空如也

空空如也

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

TA关注的人

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