自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 前端-脑图

前端学习脑图

2022-09-18 21:36:32 98 1

原创 前端知识积累

前端知识

2022-07-29 15:23:42 156

原创 立即执行函数、闭包

// for (var i = 0; i<3; i++){ // setTimeout(function (){ // console.log(i) // }) // } // 怎样输出 0 1 2 // let 来声明块变量,这时候变量就能作用于这个块 // for (let i = 0; i<3; i++){ // setTimeout(function (){ // .

2021-09-09 10:40:43 124

原创 JS中的slice,深拷贝?浅拷贝?

首先,slice是对数组的操作b = a.slice(); 如果a数组里的值都是基本数据类型,那就是深拷贝其次,如果其中有引用数据类型,那拷贝的就是引用数据类型的地址,那么改了a,b对应的引用类型也会改。最后注意,如果 b[2] = 100, 对应的引用类型 a[2]不会更改,因为 b[2]改的是指针,不是引用数据类型...

2021-09-02 17:27:01 1259

原创 cookie、sessionstorage、localstorage区别及应用场景

相同点:都是同源的、保存在浏览器的cookie存储大小:4kb,适合保存小数据请求都会传送到服务器应用场景:判断用户是否登陆过网站、一般存储用户名密码相关信息localstorage存储大小:5MB生命周期:永久,除非主动删除请求不会传送到服务器,因为存储在本地应用场景:统计页面访问次数sessionStorage存储大小:5MB生命周期:关闭了浏览器窗口后就会被销毁请求不会传送到服务器,因为存储在本地应用场景:统计当前页面元素的点击次数...

2021-09-01 16:10:42 120

原创 Cookie详解

1、Cookie目的由于http是无状态的,所以可以通过cookie来记录用户状态。服务器会在响应头的 set-cookie里面添加一个识别码,浏览器会把cookie保存起来。再次请求该网页时,会在请求头里增加cookiei字段、这样服务器就可以知道用户状态。2、Cookie介绍cookie是用name-value的形式存储的cookie的创建方式(后端)new一个cookie传参name-value,设置生命周期,添加到响应头 protected void doGet(HttpServ

2021-09-01 15:52:13 158

原创 标准盒子模型和怪异盒子模型(IE盒子模型)

标准盒子模型设置方式:border-sizing: content-box(默认)包含:margin、border、padding、content怪异盒子模型(IE盒子模型)设置方式:border-sizing: border-box包含:margin、border、padding、content区别标准盒子的总宽度为: margin+border+padding+content= margin+border+padding+width怪异盒子的总宽度为:margin+border+pad

2021-09-01 11:38:22 218

原创 三个元素平均分配宽度

采用flex布局把三个子元素都写上 flex:1就会平分

2021-09-01 10:48:50 341

原创 JavaScript严格模式下this的指向

在严格模式下全局作用域的this指向window对象全局作用域中函数的this为undefined对象、事件之类的就是谁调用就是谁参考资料:https://www.jb51.net/article/118506.htm

2021-09-01 10:40:53 65

原创 HTTP2详解

https://http2-explained.haxx.se/zh/part3

2021-08-18 15:31:20 79

原创 蛇形打印二叉树

采用层序遍历的方式。虽然leetcode有点问题,但结果没错的var levelOrder = function(root) { if(!root) return null; let res = []; let flag = 1; let queue = []; queue.push(root); while(queue.length > 0){ let temp = []; let tempQ = [];

2021-08-03 17:08:12 249

原创 统计一个元素出现的次数(通过循环arr.index(值)不为-1就增加计数器,并用splice删除节点)

/*统计一个数字在排序数组中出现的次数*/// indexOf():可返回某个指定的字符串值在字符串中首次出现的位置,没有出现则返回-1// splice():向从数组中添加/删除项目,然后返回被删除的项目。// .splice(index,howmany,item1..itemn):index代表索引,howmany代表删除几个数字,若为0则是插入。item代表插入的值var findNums = function (nums, target){ res = 0; while (n

2021-06-21 20:46:20 92

原创 找出数组中超过一半的数字(遍历整个数组, 利用map存储对应的节点和次数,用has, get, set更新节点的次数;遍历完后根据get到的值是否大于len/2来得到元素)

var majorityElement = function(nums) { let len = nums.length; let res = new Map(); for(let i = 0; i < len; i++){ if(res.has(nums[i])){ res.set(nums[i], res.get(nums[i])+1); }else{ res.set(nums[i], 1);

2021-06-21 20:42:59 80

原创 找出数组中的重复数字(利用set,先用size得到set的大小,再用add添加数,判断当前set的size是否增加,增加了代表是重复数值,就输出)

// 找出数组中重复的数字// 输入:[2, 3, 1, 0, 2, 5, 3]// 输出:2 或 3// nums用来表示待查询的数组// Set()是重复有序的,利用这一点,若Set没有增加长度,则代表有重复的值出现var findRepeatNumber = function (nums){ let s = new Set(); for(var i in nums){ var curLength = s.size; s.add(nums[i]

2021-06-21 20:40:07 186

原创 二维数组查找值

/*在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。*/// flat() : 数组扁平化,实现降维;// arr3.flat(Infinity);: 使用 Infinity 作为深度,展开任意深度的嵌套数组// includes() 方法用于判断字符串是否包含指定的子字符串。如果找到匹配的字符串则返回 true,否则返回 false。includes()

2021-06-21 20:37:46 129

原创 0-n之间的缺失数字(由于是有序的0-n-1的数值,所以使用二分查找,判断当前数值是否和索引一样,不然就继续循环)

/*一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。 在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。*/// Math.floor(x):对一个数向下取整// 二分查找法var findmissingNumber = function (nums){ let len = nums.length; // 判断是否是第一个或最后一个缺失 if (nums[0] != 0){ return

2021-06-21 20:33:44 159

原创 求连续子数组的最大和(从第二个点开始记录每个值加上前面的值是正影响还是负影响,负影响就加0,正影响就加值)

/*输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n) *//*动态规划时间复杂度 O(N):线性遍历数组 nums 即可获得结果,使用 O(N) 时间。空间复杂度 O(1):使用常数大小的额外空间。 *//*算法步骤:①状态定义: 设动态规划列表 dp,dp[i] 代表以元素 nums[i] 为结尾的连续子数组最大和。(为了保证连续子数组)②转移方程: 若 dp[i - 1] ≤ 0 ,说明 dp[i - 1] 对 d

2021-06-21 20:15:29 68

原创 剪绳子------JS(核心:2*2比3*1大)

/*给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0]*k[1]*...*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。 *//*解题思路:设将长度为 n 的绳子切为 m 段:本题等价于求解: max(k[0]*k[1]*...*k[m-1]),其中 n = k[0]+k[1]+..

2021-06-21 20:03:41 117

原创 斐波那契数列三种方法

/* 方法一:递归 */// function fn1(n){// if (n<=2){// return 1;// }// return fn1(n-1)+ fn1(n-2);// }// console.log(fn1(6));// 方法二:迭代// function fb(n){// let a = 0, b = 1, sum;// for (let i = 0; i < n; i++){//

2021-06-21 20:00:43 78

原创 box-sizing

含义由于给一个盒子增加padding和border之后,盒子会变大。若将box-sizing设置为border-box,可以让盒子元素的宽高不变。原理原理:减去了内容的宽高

2021-06-19 20:39:49 47

原创 CSS画圆

设置宽高、背景颜色border-radius:50%(添加圆角的边框)

2021-06-19 20:38:42 221

原创 CSS中的BFC

含义BFC是一个独立的布局环境,其中的元素环境不受外界影响。方法position为absolute、fixed设置浮动float设置overflow(不为visible)display为inline-block、flex

2021-06-19 20:37:54 42

原创 z-index

作用控制定位流的覆盖关系,默认为0。谁的z-index值大,谁就在上面从父现象如果两个元素都没有设置父元素的z-index值,那么谁大就在上面;如果两个元素都设置了父元素的z-index值,那么子元素的z-index就失效,只看谁的父元素大,谁就在上面...

2021-06-19 20:36:25 47

原创 图片懒加载——非框架,使用JS(两种方法)

事件监听监听scroll这个事件,鼠标滚动就触发window.innerHeight是窗口显示区的高度getBoundingClientRect().top获取图片到视口上方的高度图片若未能显示到屏幕上:说明getBoundingClientRect().top大于window.innerHeightdata-src:不知道要在哪里下载图片。等到真正需要加载图片的时候,获取这个属性值,赋值给imgae的src缺点:消耗资源,一直在触发监听事件,会造成性能问题浏览器提供的构造函数Inter

2021-06-19 20:34:37 46

原创 冒泡排序最好情况为什么是O(N)?

function bubbleSort(nums){ let len = nums.length; let flag = true; for (let i = 0; i < len && flag; i++) { flag = false; for (let j = 0; j < len - i - 1; j++){ if (nums[j] > nums[j+1]){

2021-06-17 23:06:34 602

原创 Object.assign(target, source1,source2)

作用将可枚举属性的值多个源对象复制到目标对象,并返回对象如果源对象属性的值是简单数据类型,就是深拷贝;如果源对象属性值为引用数据类型,那么就是浅拷贝

2021-06-13 17:20:15 130

原创 leetcode——整数反转

思想判断溢出方式:看 res 是否大于 最大值/10,如果等于,判断后面那个数是否大于7(计算的最大数的个位数)看 res 是否小于 最小值/10,如果等于,判断后面那个数是否小于8(计算的最小数的个位数)function resvese(num){ let res = 0; const MAX_VALUE = parseInt(Math.pow(2, 31)) - 1; const MIN_VALUE = - parseInt(Math.pow(2, 31)); le

2021-06-13 10:25:40 71

原创 算法——简单选择排序

function selectSort(nums){ let len = nums.length; let min,temp; for (let i=0;i<len-1;i++){ let k=i; for (let j=i+1;j<len;j++){ if (nums[k]>nums[j]){ k=j; } } min =

2021-06-12 17:29:42 95

原创 算法——直接插入排序

// 从头开始,保持一个有序排列,如果找到了比后面大的,比前面小的,就停止这一层循环function insertSort(nums){ let len = nums.length; if (len<2){ return nums; } for (let i = 0; i < len; i++){ for (let j = i+1; j>-1&& nums[j]>nums[j+1]; j--){

2021-06-12 17:29:04 37

原创 算法——快速排序

var test=[5,7,2,9,3,8,4,7,1];// 每次选择最左边的数作为基数// var quickSort = function (arr){// if (arr.length < 2) {return arr;}// let left = 0;// let right = arr.length - 1;// while (left < right){// while (arr[right]>=arr[0] &

2021-06-12 17:28:33 79

原创 算法——冒泡排序

// function bubbleSort(nums){// let len = nums.length;// let flag = true;// for (let i=0;i<len&&flag; i++){// flag = false;// for (let j=0;j<len-i-1; j++){// if (nums[j]>nums[j+1]){//

2021-06-12 17:27:36 57

原创 树 —— 深度优先遍历

数据结构:栈使用递归:判断传入的节点是否为空,为空就return,根据遍历顺序丢给调用函数,再把当前的值赋给res数组// 前序遍历// var preOrder = function (root){// let res = []// let stack = []// root && stack.push(root)// while (stack.length>0){// let temp = stack.pop()//

2021-06-12 17:26:44 220

原创 树 —— 广度优先遍历

数据结构:队列核心:只要queue中有节点,就删除queue中的第一个节点,把节点值赋值给res,并判断这个节点是否有左右节点,有就依次放入queue中。循环直至queue中没值。var levelOrder = function (root){ let res = [] let queue = [] root && queue.push(root) while (queue.length>0){ let temp = queue.s

2021-06-12 17:25:27 67

原创 this.$nextTick

watch: { list () { this.$nextTick(function () { console.log(this.$refs.group) }) } } 注意:watch只能监听数据的变化,数据变化的时候不一定已经渲染完了所以为了保证是渲染完成之后再去获取,我们可以借助Vue的$nextTick方法来实现也就是说在 $nextTick 回调函数中一定能拿到渲染完成的数据,因为 $nextTick 回调函数只有在渲染完成

2021-06-04 20:35:12 78

原创 GET http://127.0.0.1:3000/lyric 502 (Bad Gateway)

原因:连接超时解决方案:发现服务器命令行显示表示请求到了服务器,但是解析数据的时候出了问题发现是请求的数据 id 没有在 actions.js 的 setSongDetail 中,没有给 obj 传 id,所以访问不到。...

2021-06-01 17:48:19 441

原创 点击播放模式按钮没反应

Vue warn: Method “computed” has type “object” in the component definition. Did you reference the function correctly?原因:把computed、watch写到了methods里面解决方案:写到正确的位置

2021-06-01 17:47:42 303

原创 GET http://127.0.0.1:3000/banner?type=2

项目bug—GET http://127.0.0.1:3000/banner?type=2 net::ERR_CONNECTION_REFUSED原因:swiper的bug,如果数据是从网络获取的,那么自动轮播到最后一页就不播了解决方案:给 swiper 设置 v-if=“banner.length > 0”

2021-06-01 17:47:05 864

原创 MVC 和 MVVM

MVCMVC:分为View用户界面、Controller业务逻辑、Model数据保存。通信方式从View --> Controller --> Model —> View 单向传递。MVVMMVVM:分为Model数据模型、View视图、VM数据模型和视图的桥梁。支持数据双向传递。数据可以从 M -> VM -> V,也可以从 V -> VM -> M。Vue就是基于MVVM,默认是单向传递 M -> VM -> V,在、多行文本及 下拉列表

2021-05-24 21:34:48 60

原创 vue子组件data为什么是函数

因为如果不是通过函数返回的,那么多个组件就会共用一份数据,就会造成数据混乱。

2021-05-24 21:32:08 53

原创 v-slot的原理

在子组件中先用slot标签放一个插槽,可以用name指定名称,这就是具名插槽。在父组件中使用子组件时,在子组件的里面把v-slot:name指定绑定在template标签上。

2021-05-24 21:31:17 178

空空如也

空空如也

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

TA关注的人

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