- 博客(29)
- 收藏
- 关注
原创 python爬虫记录
import requestsfrom lxml import htmlheader = { "Connection": "close", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36"}etree = html.etreeresponse = requests.g
2021-09-30 09:52:03
341
原创 手写Object.defineProperty(),vue检测数组变化的代码
1,对象监听let obj = { a: { b: 1, c: 2, }, d: 4, }; observe(obj); obj.a.b = 3; //直接修改b的值 监听成功 obj.a = 4; //把a赋值成基本类型 监听成功 obj.d = 5; //直接修改d的值 监听成功 obj.d = { //把d修改成对象 监听.
2021-09-06 14:55:52
492
原创 a++ 与 ++a的区别
前言a++和++a都属于自增运算符,区别是对变量a的值进行自增的时机不同。a++是先进行取值,后进行自增。测试let a = 4; let b = 5; let c = b++ + ++b; console.log(c);//12 console.log(a++);//4 console.log(++a);//6总结a++先取值,再自增,打印a++是自增之前的值++a先自增再取值,所以取到的值已经完成自增之后的值...
2021-09-03 17:59:25
965
原创 2021-09-03 += 和 =+的区别
前言写leetcode算法时,总会绕进去+=和=+的问题,很费时间。总结一下他们的区别。测试 let a = 10; a += 1; console.log(a);//11 a =- 1; console.log(a);//-1看到上面代码大概明白咋回事了吧,=-是一个赋值问题,+=才是计算问题。总结+= 是简写,a += 1就是a = a+1=+并不是简写,a =+ a直接对a的赋值,±符号代表的是正负(完全可以省略不写),即a
2021-09-03 16:31:09
105
原创 leetcode 42. 接雨水
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。/** * @param {number[]} height * @return {number} *///使用动态规划var trap = func
2021-08-16 17:10:32
127
原创 2021-07-28两个对象的合并方法
一,两个对象遍历赋值合并function mergeObj(obj1, obj2) { for (let key in obj2) { if (obj2.hasOwnProperty(key) === true) obj1[key] = obj2[key]; } return obj1; } let obj3 = mergeObj({ a: 1 }, { b: 2, c: 3 }); console.log(obj3); //{a
2021-07-28 14:21:21
1323
原创 leetcode Z 字形变换
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:输入:s =
2021-07-22 15:04:56
243
原创 leetcode 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”代码:/** * @param {string} s * @return {string} */var longestPalindrome = function (s) {
2021-07-21 18:12:16
70
原创 对象高级相关
对象创建模式方式一:Object构造函数模式先创建空Object对象,然后动态添加属性,方法使用场景:起初不确定对象内部数据问题:语句太多方式2:对象字面量模式1,使用{}创建对象,同时指定属性,方法2,使用场景:起初时对象内部数据是确定的3,问题:如果创建多个对象,有重复代码方式3:工厂模式1,通过工厂函数动态创建对象并返回2,使用场景:需要创建多个对象3,问题:对象没有一个具体类型,都是Object类型function createPerson(name,a
2021-07-20 17:33:24
74
原创 闭包与内存泄漏
闭包怎么产生?当一个嵌套的内部(子)函数引用了嵌套的外部(父)函数的变量(函数)时,就产生了闭包注:闭包的个数====调用外部函数的次数闭包是什么?1,闭包是嵌套的内部函数2,闭包是包含被引用变量(函数)的对象注:执行函数定义就会产生闭包(只需要调用外部函数,不用调用内部函数)<script> function fn1(){ var a = 2; function fn2(){ console.log(a) }}fn1()/
2021-07-19 17:38:44
223
原创 执行上下文和执行上下文栈
变量提升与函数提升什么是变量提升通过var定义(声明)的变量,在定义语句之前就可以访问到变量值:undefined什么是函数声明提升通过function声明的函数,在之前就可以直接调用值:函数定义(对象)出现变量提升函数提升的原因执行上下文全局执行上下文在执行全局代码前将window确定为全局执行上下文对全局数据进行预处理var定义的全局变量 ===> undefined,添加为window属性function声明的全局函数 ===> 赋值(fun),
2021-07-18 17:00:12
112
原创 原型与原型链
构造函数的prototype属性每个函数都有一个prototype属性,它默认指向一个Object空对象(即称:原型对象)原型对象中有一个属性constructor,它指向函数对象给原型对象添加属性(一般都是方法)作用:函数的所有实例对象自动拥有原型中的属性(方法)显示原型和隐式原型每个构造函数function都有一个prototype,即显式原型(属性)每个实例对象都有一个__proto__,可称为隐式原型(属性)对象的隐式原型的值为其对应构造函数的显示原式的值总结函数的p
2021-07-17 12:46:21
72
原创 leetcode 3. 无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,“pwke” 是
2021-07-16 11:39:40
52
原创 leetcode 23. 合并K个升序链表
给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6 ] 将它们合并到一个有序链表中得到。 1->1->2->3->4->4->5->6示例 2:输入:lists = []
2021-07-15 17:16:08
69
原创 leetcode 64. 最小路径和
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:输入:grid = [[1,3,1],[1,5,1],[4,2,1]] 输出:7解释:因为路径 1→3→1→1→1 的总和最小。示例 2:输入:grid = [[1,2,3],[4,5,6]]输出:12代码://动态规划 空间状态压缩和优化var minPathSum = function (grid) { l
2021-07-15 12:02:51
62
原创 leetcode 2. 两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0] 输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,9], l
2021-07-14 13:09:25
63
原创 leetcode 258. 各位相加
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。示例:输入: 38 输出: 2 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。进阶:你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?代码//暴力+递归var addDigits = function (num) { if (num <= 9) return num let sum = 0 let str =
2021-07-14 10:32:38
78
原创 黑马vue---37-38、vue实例的生命周期
一,问题总结1,生命周期钩子和生命周期函数和生命周期事件三者之间的关系?生命周期钩子 = 生命周期函数 = 生命周期事件2、vue创建期间的生命周期函数 有哪些?beforeCreate:实例刚在内存中被创建出来,此时,还没有初始化好 data 和 methods 属性created:实例已经在内存中创建OK,此时 data 和 methods 已经创建OK,此时还没有开始 编译模板beforeMount:此时已经完成了模板的编译,但是还没有挂载到页面中mounted:此时,已经将编译好的模板
2021-07-13 10:23:00
124
原创 LeetCode 746. 使用最小花费爬楼梯
数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。示例 1:输入:cost = [10, 15, 20] 输出:15 解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15。示例 2:输入:cost = [1,
2021-07-10 17:56:39
70
原创 Vue如何实现组件间通信
父组件传给子组件:子组件通过props方法接受数据;子组件传给父组件: $emit 方法传递参数讨论1:子组件向父组件传值方法一:子组件绑定一个事件,通过 this.KaTeX parse error: Expected '}', got 'EOF' at end of input: … this.emit(‘handleChange’, ‘Jack’) // 触发父组件中handleChange事件并传参Jack// 注:此处事件名称与父组件中绑定的事件名称要一致}}}b
2021-07-08 15:36:35
112
原创 arguments
在调用函数时,浏览器每次都会传递两个隐含的参数:1,函数的上下文对象this2,封装实参的对象argumentsarguments特点:1,arguments是一个类数组对象(不是数组,但是有数组的特点),可以通过索引来操作数据,也可以获取长度。console.log(argument instanceof Array)//falseconsole.log(Array.isArray(arguments))//false2,在调用函数时,我们所传递的实参都会封装到arg
2021-07-01 11:23:24
78
原创 手写防抖节流
1.什么是防抖?事件响应函数(doSomeThing)在一段时间(await)之后才执行,如果这段时间内再次调用函数,则重新计算时间。应用场景:1,scroll时间滚动触发2,搜索框输入查询3,表单验证4,按钮提交事件5,浏览器窗口缩放,resize事件一般情况包括频繁操作,回调,发生ajax造成页面性能消耗,卡顿现象时,会用到防抖操作手写防抖需要解决的问题:1,this的指向问题2,参数的传递event3,防抖函数的第三个参数,控制只要触发立即执行..
2021-06-30 12:57:00
972
原创 文字播报上下滚动(转载)
https://www.jb51.net/article/188734.htm本文详细的介绍了vue实现公告栏文字上下滚动效果的示例代码,具体入如下:1.在项目结构的components中新建text-scroll.vue文件 {{text.val}} 2.在header-bar组件使用transition标签这里是动态组件问题:1.为什么用setInterval,而不是setTimeoutsetInterval是循环执行,setTimeout是延迟执.
2021-06-15 12:28:03
202
原创 promise对象---【阮一峰ES6】
一.认识promise1.什么是promise语法上,promise是一个对象,它可以获取异步操作的消息。(也可以说是一个容器,保存着异步操作的结果)2.promise对象的特点(1)对象的状态不受外界影响Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。(2) 一旦状态改变,就不会再变,任何时候都可以得到这个结果Promise
2021-05-09 15:11:13
1901
原创 关于Vue CheckBox change的event传值 (个人理解)
1.当单独传递event不用传参时,直接使用。因为vue默认会传递一个event过来,可以直接接收,但是调用函数不能带括号。<input type="text" value="" @change=`aaa'/>aaa(){console.log(e)}2.当需要传递其他参数时,两种方式可以传递event方法一:使用箭头函数,这种方式传递一其实跟不带参传递是一样的原理<input type="text" value="" @change=`(e)=>{aaa(e,ite
2021-05-07 18:02:15
3772
原创 echart使用踩坑 TypeError: Cannot read property ‘init‘ of undefined
无用的方法1,2,3就不记录了解决办法:1.导入echartslet echarts = require(‘echarts’);或者import * as echarts from ‘echarts’两种方法都可2.初始化echarts实例let myChart = echarts.init(document.getElementById(‘myPancake’));...
2021-05-05 21:40:24
1384
原创 #VUE脚手架创建项目---之node-module,src等等文件夹不出来的问题(报错no-module)
看看自己是不是把系统变量NODE_ENV的值写成了production,改成development就行了没找到解决方案前的文件夹是这样的:解决之后:虽然会犯这种错的概率很小,还是记录一下,不至于浪费太多时间~...
2021-04-25 20:34:52
2661
2
原创 Unity做动画不播放解决方案之一
先说故事,,,七夕那天,有约的!手头上似乎没啥事,感觉都比较好解决。然后就出事了,没错就是这个动画,搞了半天,整个界面全部重做都试过,没解决。。。。。到约会的点了,太绝望了。想想还是约会比较重要,掐着点出去两小时,看了个电影立马赶回来了。。。哭泣,,但是回来之后好像立马打通了任督二脉,好像明白了啥,一看代码,有个逻辑是这个界面一出来游戏就暂停,使用暂停的方法是SetTime==0,这会导致所有的帧动画都不能播放。解决这个问题的方法很简单,看图。。。这样就没问题了...
2020-08-27 17:17:17
4441
3
原创 #Unity 按钮选中状态的实现
第一次写文章,不太熟悉怎么上传视频,不是很生动,请大家多多照顾啦~做游戏项目遇到一个需求。进入提现界面默认第一个是选中状态,点击其他按钮,第一个按钮变为未显示状态。这个需求现在太常见了。来看看我是怎么实现的吧~选择按钮的Transition选择SpriteSwap给按钮添加图片,其他的按钮也一样哦到现在就可以实现按钮选中的效果了还有一个效果,进入界面就默认第一个按钮为选中状态使用下面这段代码就可以实现啦,这段代码挂在第一个按钮哦有啥问题欢迎大家留言~...
2020-08-27 16:54:48
7441
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人