自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深拷贝的实现

正文注意: 拷贝之后,两个对象中的函数是一个函数,也就是说两个函数名都指向一个函数对象第一种写法function deepClone(sourceObj, resultObj) {resultObj = resultObj ? resultObj : {}for (let key in sourceObj) { //这是属性得是自己有的,不是继承过来的 if (sourceObj.hasOwnProperty(key)) { //得是个引用类型的数据,才去递归啊,也不

2021-02-28 18:34:09 205 1

原创 一道经典的 js 面试题

原题目在浏览器环境下,判断程序输出的结果是? var foo = 'window的foo' let obj = { foo: 'obj的foo', func() { let self = this console.log(this.foo) console.log(self.foo) ;(function () { consol

2021-02-27 15:50:59 141 1

原创 数组和伪数组的区别

正文常见的伪数组有:函数参数arguments,DOM对象列表(例如document.querySelectorAll('div')),jQuery中的$('div')等Array.prototype伪数组没有Array.prototype,它只是一个对象数组有Array.prototype,他是对象的同时,也是数组索引(index)和长度(length)伪数组的索引,就是那些键值对的key,没有真正的顺序可言;长度是手动设置的数组的索引和长度是内置属性let arr = [

2021-02-27 13:50:42 1683 1

原创 then 方法

then()方法function func(){ return Promise.resolve('func的返回值')}function callback(arg = '没有传参'){ return `callback函数的返回值 & ${arg}`}func() .then(function (){ return callback(1) //返回的是字符串 }) .then(val => { console.log(val) //callback函数的返回.

2021-02-26 21:53:22 7114

原创 Set 集合

SetSet对象是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即 Set 中的元素是唯一的。 let mySet = new Set() let obj = { a : 1, b : 2 } mySet.add(obj) mySet.add({ a : 1, b : 2 }) //虽然与 obj 字面量相同,但是内存地址不同 mySet.add(1.

2021-02-26 13:12:44 104 2

原创 const 关键字

可能有的误解对于 ES6 中增加的const关键字,很多人的(包括我自己)都有一些误解。这个误解是:使用const关键字定义的变量是无法被修改的,即必须在定义的时候就赋值。这话不能说是全错,只是对简单类型和引用类型数据的表现不同。const实际上,const保证的不是变量的值不变,而是变量指向的那个内存地址不变。简单类型变量对于简单类型变量来说,即String,Number,Boolean,undefined,null,它们的值就保存在指向的内存变量中。如果值改变了,就意味着改变了变量的指向。所以

2021-02-26 11:51:12 111

原创 Vue 数据响应式详解

前言Vue最具特色的一点,就是数据驱动,即你不用写复杂的DOM操作,只需专心于业务所用到的数据。那么,Vue的数据响应式到底是怎么实现的呢?正文数据变化的过程侦测数据的变化 (数据劫持 / 数据代理)收集视图依赖了哪些数据 (依赖收集)数据变化时,自动“通知”需要更新的视图部分,并进行更新 (发布订阅模式)追踪数据在 new Vue() 后, Vue 会调用 _init 函数进行初始化,也就是init 过程,在 这个过程Data通过Observer转换成了getter/setter的形

2021-02-25 12:55:20 637

原创 async && await 对比 Promise

async && await 对比 Promise 的优点处理异常Promise 不能catch到Promise内部的异常 //Promise写法async function returnPromise() { return 'ok'}try { returnPromise() .then(res => { console.log(res) throw new Error('可能出错的位置

2021-02-25 11:34:18 87

原创 vue 中编写404页面

前言今日给自己项目添加404页面时,踩了一点坑,分享给大家。正文 <div class="_404"> <h2 class="m-0">抱歉,页面未找到,<span>{{countDown}}</span>s后自动跳转到 <a href="javascript:;" @click="goHome">首页</a> </h2> <img s

2021-02-19 20:37:20 5625 11

原创 Sass学习

前言这两天刚好学到sass,分享一下自己在学习过程中总结的点正文基本用法sass中导入另一个sass@import "路径"注释单行注释 //,编译后省略,只会保留在sass源文件中多行注释 /* */ ,会保留在编译后的css文件中重要注释 /*! */,在*后加一个!,压缩代码后也会保留 - 变量如果变量需要镶嵌在字符串之中,就必须需要写在#{}之中。 $font-primary-color: #0f0; $border-base: 1px solid

2021-02-18 17:32:11 94

原创 Vue 中使用 Sass 踩的坑

这两天在vue脚手架中使用Sass,踩了几个坑,分享出来。在 Vue cli3 中安装$ npm i sass sass-loader -D首先,要安装的是两个,sass sass-loader其次,一定要安装在开发依赖中,因为它是CSS的预处理器。-D即为--save -dev的缩写,这是第一个坑然后,你可以能会出现以下两个问题Sass中的独特语法,如嵌套写法,不生效甚至你连编译都过不去,项目起不来,报错那么解决方法呢?其实大概率是因为你的sass-loader的版本过高,降

2021-02-18 16:43:53 338

原创 详谈js for循环和数组遍历方法

前言早就想写一篇博客来谈谈js中的循环和一些循环的方法,这次有时间来说说。正文一. for类循环1. for — 传统的方式 for (let index = 0; index < arr.length; index++) { console.log(arr[index]) }范围: 可遍历数组,不可遍历对象迭代中的增减: 在遍历的过程中,如果对数组进行shift,unshift,pop,push,增加的元素会被遍历,删除的元素不会被遍历,但已迭

2021-02-17 21:00:57 1469

原创 油猴脚本之弹幕屏蔽

前言笔者是平常比较喜欢看虎牙直播,但是网页版虎牙并没有弹幕屏蔽功能,在油猴上也没有找到相关的脚本,自己就做了一个。说明笔者的设计初衷是在弹幕还没有进入DOM渲染流之前,也就是在刚请求完弹幕之后,对弹幕的内容进行正则。可惜虎牙的弹幕请求方式以比笔者目前的水平还没法弄懂。所以,笔者是在弹幕DOM渲染完成之后才用DOM操作获取弹幕内容然后正则。这里的弹幕屏蔽只有视频中的弹幕可以屏蔽,侧边的弹幕列表中是没有屏蔽的。如果像屏蔽侧边弹幕,可以自行改造,原理相同。这里的setTimeout的3000ms延迟

2021-02-17 15:50:27 1736 1

原创 node gbk转utf8

最近在做node爬虫的时候,发现利用axios返回的网页源码有中文乱码,一看网页的编码方式得知是gbk编码。研究了一下,问题解决,分享出来防止以防大家踩坑。安装 iconv-litenode默认不支持gbk编码方式$ npm i iconv-lite这个模块是node专门处理字符编码的方法decode(data,'编码方式'),第一个参数为需要解码的buffer,一定得是一个buffer;第二个参数为以什么编码方式解码,如utf-8,gbk等。注意,第二个参数是你需要解码的数据的编码方式

2021-02-09 15:16:35 964 2

原创 Promise详解

Promise 有三个状态:pending准备/挂起阶段resolve成功,调用resolve()reject失败,调用reject()resolve和resolve状态是唯一的且不可逆。基本写法: new Promise((resolve,reject)=>{// resolve()// reject() }).then(data=>{//resolve状态执行这里},err=>{//reject状态执行这里}).then返回值..

2021-02-09 11:58:49 151

原创 js 事件循环机制、宏任务微任务

宏任务和微任务定义宏任务: 常用的包括setTimeout,setInterval微任务: 常用的包括Promise. then finally catch, process.nextTick执行顺序为:微任务先于宏任务执行 setTimeout(function () { console.log('setTiemout宏任务') }, 0) new Promise(resolve => {

2021-02-06 15:23:19 163

原创 node 创建一个简单的服务器

npm i express cors安装express,安装cors是为了解决跨域问题const express = require('express')const app = express()app.use(require('cors')())app.get('/', (req, res) => { res.send({message: 'ok'})})app.listen(3000, () => { console.log('Server is Ru

2021-02-06 10:46:32 68

原创 Node + Vue + ElementUI 后台管理系统

开发记录开发记录所用的技术和特点主要技术nodejsexpressVuemongoDBmongooseelementUIaxiosbcrypt 密码加密multer 文件上传http-assert 错误处理jsonwebtoken 服务端接口认证vue2-editor 实现富文本编辑特点前端动态路由后端CURD接口通用下载并运行解压之后得到的文件夹,会有两个子文件夹,分别为 server 和 web,即一个服务端,后端node所用和前端vue所用。终端定位到

2021-02-04 21:44:46 673 7

原创 Vue+ElementUI 表格中使用过滤器

最近遇到一个这样的需求:超出几个字长度的话,就省略绝大部分内容并且加一个省略号。其实不难,有各种方法可以实现,那么我这里突然想到用过滤器实现,研究后,表示可行。过滤器写法Vue.filter('formatLength', value => { return value.length > 9 ? value.slice(0, 9) + '...' : value})很简单,如果字符串的长度超过9,那么就会截取前九位并加三个点;如果说压根没超过9,那就作罢,直接返回原字串。

2021-02-02 22:20:19 1438

原创 Nodejs 上传图片并预览

本文分两个部分,第一部分为nodejs+express和前端原生js+axios,第二部分为实际应用Vue+elementUI和node+express中配置。原生js+axios实现效果:node端:const express = require('express')上传文件所需的模块const multer = require('multer')const app = express()这里是你上传的路径,__dirname是一个全局变量,表示你当前文件所在的绝对路径,拼

2021-02-02 11:14:28 962

空空如也

空空如也

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

TA关注的人

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