- 博客(43)
- 收藏
- 关注
原创 javascript高级程序设计第四版读书笔记-第五章 基本引用类型
先是 Math.random() 生成 [0, 1) 的数,也就是 0.123312、0.982931之类的,然后调用 number 的 toString方法将其转换成36进制的,按照MDN的说法,36进制的转换应该是包含了字母 a~z 和 数字0~9的,因为这样生成的是 0.89kjna21sa 类似这样的,所以要截取一下小数部分,即从索引 2 开始截取10个字符就是我们想要的随机字符串了。Date.UTC()方法也返回日期的毫秒表示,但使用的是跟 Date.parse()不同的信息来生成这个值。
2023-02-22 16:11:02
433
原创 javascript高级程序设计第四版读书笔记-第四章 变量、作用域与内存
声明变量并给它赋一个引用值时,这个值的引用数为 1。类似地,如果保存对该值引用的变量被其他值给覆盖了,那么引用数减 1。当一个值的引用数为 0 时,就说明没办法再访问到这个值了,因此可以安全地收回其内存了。或者可以维护“在上下文中”和“不在上下文中”两个变量列表,可以把变量从一个列表转移到另一个列表。区别是:2和3都是对象,可以添加属性,1是原始类型,不能添加属性,3是实现了安全模式的对象。(3)声明对象时,不使用动态添加属性,声明是就将所有要用的属性声明好。(1)不使用了的变量用null赋值。
2023-02-22 15:57:57
291
原创 javascript高级程序设计第四版读书笔记-第三章 语言基础
如果将一元加应用到非数值,则会执行与使用 Number()转型函数一样的类型转换:布尔值 false 和 true 转换为 0 和 1,字符串根据特殊规则进行解析,对象会调用它们的 valueOf()和/或 toString() 方法以得到可以转换的值。=》this:1.必须指定this,null会报错,不然使用会报错,,非严格模式如果指定this为null,则是指向全局。=》函数的参数:1.使用了ES6的参数解构,剩余操作符,默认参数,函数内不允许使用严格模式,可以全局严格模式。
2023-02-22 15:54:11
457
原创 微信小程序使用canvas绘制网络图片,使用canvas将图片变成圆形
以上的写法 会造成某些图标无法绘制上去,解决方法是在网络图片中不断嵌套,
2023-02-08 18:10:08
2147
1
原创 第8章:切片
【1】方式1:定义一个切片,然后让切片去引用一个已经创建好的数组。【2】方式2:通过make内置函数来创建切片。基本语法: var切片名[type = make([], len,[cap])PS : make底层创建一个数组,对外不可见,所以不可以直接操作这个数组,要通过slice去间接的访问各个元素,不可以直接对数组进行维护/操作【3】方式3:定一个切片,直接就指定具体数组,使用原理类似make的方式。
2023-01-10 20:08:17
424
原创 第七章:数组
成绩变量定义个数太多,成绩管理费劲,维护费劲 —》 将成绩找个地方存起来 —》 数组。(2)每次遍历得到的索引用key接收,每次遍历得到的索引位置上的值用val。(3)key、value的名字随便起名 k、v key、value。【3】如想在其它函数中,去修改原来的数组,可以使用引用传递(指针方式)。【2】Go中数组属值类型,在默认情况下是值传递,因此会进行值拷贝。(4)key、value属于在这个循环中的局部变量。【3】赋值内存:(数组是值类型,在栈中开辟内存)(1)coll就是你要的数组。
2023-01-09 22:07:03
182
原创 第六章 错误处理
自定义错误:需要调用errors包下的New函数:函数返回error类型。go中追求代码优雅,引入机制:defer+recover机制处理错误。发现:程序中出现错误/恐慌以后,程序被中断,无法继续执行。借助:builtin包下内置函数:panic。优点:提高程序健壮性。
2023-01-05 23:56:47
104
原创 Vue.js设计与实现读书笔记五 第五章 非原始值的响应式方案
(1)主要问题是修改方法push/pop/shift/unshift 会在读取的时候会读取和设置length,如果一个reactive对象有两个effect函数,会造成,第二个修改length的时候,第一个副作用执行,然后又执行第二次副作用函数,然后就会无限循环,直到栈溢出。原因是arr[0]是个对象,所以会被变成深代理,创建一个新代理,而includes中的arr访问的元素也是一个对象,这两个对象不一样,每次使用reactive传的对象都是不一样的,即使参数相同。(3)把数组作为对象,使用for…
2022-11-23 14:34:17
262
原创 git的常用命令
vscode安装插件,project-tree安装之后按ctrl+shift+p,并输入Project Tree回车点击要生成目录的项目,回车将项目目录生成并存储到README.md中。
2022-10-28 15:51:30
202
原创 Vue.js设计与实现读书笔记十四 第十四章 内建组件和模块
KeepAlive的本质是缓存管理,再加上特殊的挂载/卸载逻辑。KeepAlive组件的实现需要渲染器层面的支持。在keepalive组件卸载时我们不能正的将他卸载,KeepAlive的插槽中的组件的Vnode被KeepAlive插入。KeepAlive的instance上有两个函数。
2022-09-18 23:05:03
180
原创 Vue.js设计与实现读书笔记十三 第十三章 异步组件与函数式组件
①异步组件是指:异步的加载一个组件并渲染他,是用于分隔代码,服务器下发组件等场景中②函数式组件是指:允许通过一个函数来定义组件,函数的返回值作为渲染的内容,函数组件的特定是无状态(没有data),编写简单直观。③vue3中的函数式组件和普通组件的性能区别不大,而vue2中函数式组件比不同组件性能好。
2022-09-18 21:55:23
358
原创 Vue.js设计与实现读书笔记十二 第十二章 组件的实现原理
当页面越来越大,内容越来越多,那么对应的Vnode也会非常多,这时候就需要组件化,组件的好处是可以复用,然后可以将页面拆为多个部分,分别来构建。
2022-09-15 22:30:17
420
原创 小米手机无需刷入Recovery获取Root权限,卡刷包payload.bin提取boot.img文件
注意一下操作都需要解bl锁,退出手机账号,备份数据,打开use调试才可以。
2022-09-05 10:55:28
9338
原创 Vue.js设计与实现读书笔记九 第九章 简单Diff算法
这一节要解决的问题,就是第八章的时候比较Vnode新与旧的的子节点,当新与旧的子节点都是一组的情况,之前的方法是直接将所以旧的子节点,调用unmount循环全部卸载掉,这样做会导致性能开销,要先卸载,然后再重新渲染,如果能复用节点,将节省性能,特别是如果子节点变化不大,如果能精准更新旧更好了,这一节,要解决的就是当新子节点中没有,旧子节点有的节点的删除,主要的问题是如何找到旧不可复用的子节点。如图,新子节点p-3对应的可复用的旧子节点的索引最大为2,而新的子节点p-1,p-2都比。
2022-09-02 10:59:12
279
原创 Vue.js设计与实现读书笔记八 第八章 挂载与更新
这里使用的是将DOM中绑定一个伪造事件处理函数,说白了,就是在绑定DOM中的会调函数中,使用对象调用真实绑定的函数,当更新的时候,更新这个对象的函数,就实现了事件更新,不用使用removeEventListenner解绑。注意:**当新children和旧的为一组时,这里的代码没有比较,直接将旧的卸载掉,重新渲染新的,如果子节点很多,那么性能肯定不行,vue使用的就是diff算法来解决的 **两者一般是一对一的,但是也有attitudes有的属性,properties没有,也有翻过来的。.........
2022-09-01 14:26:42
461
原创 Vue.js设计与实现读书笔记七 第七章 渲染器的设计
这里要解决的问题是,要将操作Dom的逻辑变成参数,提取出来,因为要设计一个多平台的渲染器,操作Dom的逻辑是浏览器专属的.创建dom,为标签插入字符,挂载到Dom上这些逻辑,都由用户传入,const {createElement , insert , setElementText } = options // 挂载 function mountElement(vnode , container) {...
2022-08-30 12:00:39
239
原创 Vue.js设计与实现读书笔记六 第六章 原始值的响应式方案
第六章主要讲解的是原始值的响应式方案,reactive,ref,toRef,toRefs之间的关系,以及他们的作用,简单来说,ref是由ractive构建的,toRefs是由toRef构建的。
2022-08-30 10:03:52
330
原创 Vue.js设计与实现读书笔记四 第五章 非原始值的响应式方案
(1)之前的代码,都是浅响应,例如:let obj={ test:{title:1}} 当访问obj代理 p访问属性时候,只有p.test能触发副作用函数,p.test.title不能,原因是test只是一个普通对象,(2)了解的浅响应的问题,那么我们可以在收集副作用的时候,判断属性对象是不是一个对象,如果是就递归调用,这样就实现深响应(3)深浅响应是真的属性的深度,原型是指代理对象的原型链,如果原型上的属性也是对象,那么遵循,对象属性上的规则。
2022-08-29 15:25:21
236
原创 Vue.js设计与实现读书笔记三 第四章响应系统的作用与实现
然后watch内部的effect 使用了lazy,不立刻执行副作用函数, 最后执行effectFn(),获得第一次的旧值,同时触发track收集副作用函数,当监听的值改变,scheduler中执行effectFn()获得新值,执行cb()然后将新值赋值给旧值,这样,下一次改变监听的数据,旧值就是上一次的新值。这个主要是watch监听的数据改变,回调函数如果是异步函数,那么每次数据改变,就会触发异步函数,但是如果确定那个异步函数的结果是我们想要的,这里让最后一个异步函数的结果为最终结果。......
2022-08-27 11:16:47
222
原创 vue3项目打包错误
这个错误似乎是 plugin-legacy 2.0需要 vite 3.0才行。(1)在安装包的时候忽略冲突,安装命令后面加。(2)更新所有的包到,最新,再来解决冲突。第一个报错js,右键点进去,搜索。但是我是这样的也报错。
2022-08-22 15:31:51
11224
原创 vue3 实现动态切换语言
1)创建一个文件,i18n/index.jsimportmZhLocalefrom'./lang/zh'//中文语言包importmEnLocalefrom'./lang/en'//英语语言包importgetLangfrom"../utilities/BrowserLang"//获取浏览器的语言import{getItem}from"../utilities/Storage"//获取本地存储设置的语言import{en{msg{...
2022-07-29 15:37:55
3351
原创 express使用webSocket
io.emit(“userMsgs”,usermsgs.map(item=>[item[0],item[1]]))表示广播给所有客户端。其中io.on(“connection”,)这个是表示监听链接的客户端,是内置的事件。client.on(“disconnect”,)这个表示监听客户端离开,是内置事件。这里使用socket.io,实现一个聊天的Demo。其他的on监听事件,是自定义的和客户端相对应。#webSocket的特点。...
2022-07-19 15:20:49
1274
原创 vue3实现网页切换加载组件
在这之前应该让这个组件,提前渲染到页面中如下将它的虚拟dom渲染到body下面。(2)由于这个是切换页面时候的动画,所以要在切换路由的时候,执行这两个方法,这个组件定义两个动画,一个是开动画,加载到90%,一个是加载到100%(1)LoadingBar.vue实现这进度条模板。切换之前1%-90%,切换之后90%-100%(3)当路由切换的时候,调用这两个方法。...
2022-07-16 11:11:21
771
原创 express使用token实现登录操作
但是由于没次请求就会自动带上cookie,这有一定安全问题,例如当你之前登录过某个银行网站,他们使用session的方式,你再在某个钓鱼网站点击别人定制的链接,就可能在钓鱼网站登录了银行网站执行某些操作,因为这种不受浏览器同源策略限制,而使用token,他一般不会自动提交,就没有这个问题了,钓鱼网站无法获得token。其中1.setToken是生成一个加密的token字符串,我这里定义的参数是(用户名,用户id,过期时间),(3)前端查看有没有token,有的话,存储到localStorage,...
2022-07-15 16:13:54
1000
原创 Ts实现发布订阅模式
发布订阅模式有4个方法,存储结构是一个对象键是表示类一类,值是一个对象,每一项都是一个方法1.on方法将某给对象属性,数组添加一个方法2.emit方法将对象属性的数组中的方法遍历执行3.off删除对象属性数组中的某一个方法4.once和on一样,只是添加的方法emit只能执行一次,执行一次后销毁...
2022-06-15 16:12:04
687
原创 typescript学习笔记2 配置浏览器兼容性
webpack.config.js需要安装的插件:(1)其中最重要的的是environment 属性,ts兼容性流程是ts-loader将ts变成js,这一步只是转成对应的版本的语言,没有做兼容性,然后babel-loader在将js转为模板兼容浏览器,所能执行的代码,再由webpack打包,最后一步默认会使用箭头函数,所以低版本浏览器使用了babel依然会报错,所以低版本浏览器不应该使用箭头函数(2)loader是从后向前执行的,contentBase: “./dist” 最新版本中不能用...
2022-06-10 17:01:46
691
原创 express实现自定义跨域请求
发现网上的教程都是教让服务器任意跨域,一般为了安全起见,Access-Control-Allow-Origin字段不应该为*而是应该有一个自定义规则,如果对同源策略,跨域请求不了解,可以先看看阮一峰的文章:https://www.ruanyifeng.com/blog/2016/04/cors.htmllet express = require("express");// 获取路由 好处是可以写在其他文件中let {Router} = express;// 创建路由对象let router
2022-05-25 16:04:42
285
原创 js异步事件同步执行案例
要做一个什么事呢?简单说就是模拟点击获得数据如图,要收集页面上的文章 的url,标题,日期三样内容组成一个表格绘制到页面上,标题和日期可以直接获得页面的dom,用for循环填充到一个HTML字符串中,这里的问题是url的值需要点击分享按钮,在弹窗的复制链接下才有,这篇文章的url,如果直接for 循环中模拟点击,会找不到弹窗的url值,如下:猜测是点击事件后,弹窗的url值还没更新,所以需要点击后等待一会儿,让其他代码更新弹窗的url值,然后在收集弹窗的url ,就可以将用异步事件同步事件来
2022-05-19 18:14:49
646
原创 Vue.js设计与实现读书笔记一
第一章 权衡的艺术1.什么是声明式和命令式?更新局部数据innerHTML和虚拟DOM 以及原生DOM操作之间的性能对比?=》声明式就是:给参数 然后不用管过程,直接得到结果 命令式:从一步一步从开始到结果, 声明式式命令式的封装命令式:效率高 声明式:维护方便 简单=》innerHTML 跟新数据,是必须跟新全部数据,计算量包括,DOM操作innerHTML原理创建一个fragment(document碎片)将 newHTML 设置到 fragment 内部 (这里怎么设置的不必关心,
2022-05-18 19:50:01
443
原创 手写面试题三:防抖和节流
防抖(debounce)防抖是指,某个固定时间外,可以执行事件回调,如果在固定时间内触发,则重新计时。它的作用就是在高频事件中只执行最后一次。例如多次快速点击提交function myDebounce(fun, wait = 1000) { let timeout; return function () { // 存储this和参数 let context = this, args = arguments;
2022-05-14 15:57:02
266
原创 手写系列二,Promise
手写promise注意resolve中的setTimeout异步方法也可以写在.then中,他是Promise的精髓参考https://zhuanlan.zhihu.com/p/457389524 const PENDING = "pending"; const REJECTED = "rejected"; const RESOLVED = "resolved"; function myPromise(fun) { let self = t
2022-05-13 18:02:19
103
原创 面试题手写系列一,手写Oject.create,Instanceof,new操作符
手写 Object.create <!-- 1.手写 Object.create --> <script> // Object.create的作用是将对象,变成一个空对象的原型,第二参数是在空对象中添加实例属性 let obj1 = { name: "xxx" }; obj1.__proto__.age = 18; console.log( Object.create(obj1, { g
2022-05-13 15:05:46
233
原创 箭头函数与普通函数的区别?
== 操作符的强制类型转换规则?(1)先比较两个的类型是否是相同,如果相同比较值(2)看两个值是否是null和undefined的比较,是返回true(3)看两值是不是string和number类型比较,将string转为number比较(4)看一方是否是boolean,是转为number再比较(5)一方是Object,另一方是string,number,symbol,将Object转为原始类型再判断其他值到字符串的转换规则?其他值到数字值的转换规则?其他值到布尔类型的值的转换规则?||
2022-05-12 16:43:23
50
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人