JavaScript
文章平均质量分 50
JavaScript的一些笔记
ccattempt
是的,就在那里。
展开
-
简单的柯里化转换
今天看源码看到了柯里化的利用,过去从来没注意这块知识,上午手动实现了一个简单的将任意函数转化为柯里化形式。function curry(fn, args, length) { let arg = args || []; let len = length === undefined ? fn.length : length; return function f(...rest) { arg = arg.concat(rest); const res.原创 2021-09-06 15:52:17 · 84 阅读 · 0 评论 -
手动实现一个flat方法
最近看 vue 源码的时候,看到了 normalizeArrayChildren 里面对数组的打平操作,感觉很不错就把它单独抽离出来,做了小改动function myFlat(array, deep) { const res = []; let i, c; for (i = 0; i < array.length; i++) { c = array[i]; if (Array.isArray(c) && deep--) { c = myFlat(c, deep.原创 2021-09-04 23:30:34 · 316 阅读 · 0 评论 -
一个将扁平数组转成树形数据的非递归函数
通常我们都是通过递归的方式将扁平数组转成树形数据,这次偶然看见一位大佬写的非递归方法,记录下来学习一下。人菜就得多学习啊/** * @param list 列表 * @param id id-key * @param pid pid-key * @param rootid 根id * @param children children-key */function toTree(list = [], { id = "id", pid = "pid", rootid = "rootid", .原创 2021-08-10 14:28:10 · 256 阅读 · 0 评论 -
秒删node_modules的方法
使用一个包即可:npm install rimraf -g使用:rimraf node_modules以上。原创 2021-08-06 17:46:40 · 66 阅读 · 0 评论 -
函数防抖和函数节流
简单记录一下函数防抖和节流,代码来自B站小野森森老师目录1、函数防抖2、函数节流总结参考链接1、函数防抖函数防抖主要用于解决多次触发回调函数时造成的资源浪费问题。通过控制两次触发的时间间隔,达到只有时间间隔大于等于设定值才执行回调函数的效果。主要思路是每次触发回调函数时,先清空上次设置的定时器,然后设置新的定时器,重新计时。当两次操作时间间隔大于设置的时间时,定时器会被触发,从而执行回调函数,否则定时器被清空。/*** fn 需要执行的回调函数* time 时间间隔* trigger 是否.原创 2021-06-20 16:35:50 · 173 阅读 · 0 评论 -
call、apply、bind的源码实现
根据B站的小野森森老师的视频整理,代码有所修改。主要有以下难点:怎样改变this指向怎样给修改后的函数传参解决方法是:函数内部的this指向是通过其调用者决定的,因此可以通过将call等的第一个参数(假设为ctx)上增加一个属性(假设为originFn),保存当前调用函数的地址,通过调用ctx.originFn来改变this指向。然后通过将其余参数拼接为字符串,调用eval方法将字符串转为表达式的方式传参。源码如下:1、call// callFunction.prototype.my.原创 2021-05-23 18:47:28 · 189 阅读 · 0 评论 -
红宝书学习笔记之 BOM
主要是红宝书第12章内容目录1. 浏览器窗口相关API2. location3. history4. navigator1. 浏览器窗口相关API// 1 moveTo(x, y) 移动浏览器窗口到坐标 (x, y)window.moveTo(100, 100); // 在chrome浏览器中不可用// 2 moveBy(x, y) 将浏览器窗口移动 (x, y) 距离window.moveBy(x, y); // 在chrome浏览器中不可用// 3 resizeTo(x, y) 将浏览.原创 2021-04-12 22:10:05 · 110 阅读 · 0 评论 -
红宝书学习笔记3 -- Set和WeakSet类型
目录1. Set1. SetSet有点类似数组,但是Set和数组最大的不同在于Set中不能存在相同的元素。new Set([1,2,3,4,1,2,3,4]); // { 1, 2, 3, 4 }其次,Set的内置函数也没有数组那么丰富。主要有:add()、has()、delete()、clear()、keys()、values()、entries()、forEach()// 1、初始化 Setconst set = new Set();// 2、添加值set.add(1);set.ad原创 2021-04-05 12:11:45 · 73 阅读 · 0 评论 -
红宝书学习笔记(2)JavaScript里面的Map和WeakMap类型
目录1. Map2. WeakMap1. Map通常我们是使用对象来表示键值对关系,如下:let obj = { name: '李四', age: 18, desc: '一个憨批'};对于大部分情况,使用对象已经足够了。但是对象的键名只能使用字符串或者Symbol,其余类型会被转为字符串。let student1 = { name: '李四', age: 18};let student2 = { name: '李四', age:19};let score = { [st原创 2021-04-04 17:20:36 · 132 阅读 · 0 评论 -
JavaScript里面的 == 号学习笔记
JavaScript里面的 == 常常让人摸不着头脑,这次索性根据红宝书记录一下。同一类型的比较自然没什么多说的,不同类型的则会发生强制类型转换。如果有一方为布尔值,则会将布尔值转为数值(true转为1,false转为0)再进行比较如果有一方为数值,一方为字符串,则会先将字符串转为数值再比较如果有一方为对象,则会先调用对象的 valueOf 方法,再对返回值进行比较null 和 undefined不会发生强制类型转换,且 null == undefinedNaN和任何值都不相等"1" .原创 2021-04-04 14:33:55 · 68 阅读 · 0 评论 -
红宝书学习笔记(1)
红宝书第三章笔记目录1 var、let、const的区别1 var、let、const的区别let和const都是ES6引入的,下面是它们和var的区别。使用var声明的变量只有全局作用域和函数作用域,使用let和const声明的变量存在局部作用域。在全局作用域中使用var声明的变量会保存在window对象中,使用let和const声明的变量不会。使用var声明的变量具有变量提升,let和const没有。因此let和const必须先声明后使用(在let和const声明之前使用变量的这个瞬间.原创 2021-04-04 14:11:03 · 161 阅读 · 0 评论 -
base64的笔记
过去一直没搞懂base64是什么,最近看了阮一峰的笔记后,自己查了部分资料后才搞明白是什么。原来base64也像我之前做的UTF-8笔记一样,进行了编码,是为了解决电子邮件中不能直接使用非ASCII码字符的规定的问题。当然,现在我们常常是在图片中使用base64,减少请求次数。目录1、什么是base642、base64的编码方式3、base64的优缺点4、参考链接1、什么是base64我们都知道,ASCII码字符集只有128个字符,对于美国人可能还够用,但是对于其他国家来说就远远不够了。于是出现了.原创 2021-02-09 11:38:49 · 217 阅读 · 0 评论 -
Unicode,UTF-8,UTF-16和JavaScript
过去一直没搞懂Unicode和UTF-8之间的关系,对JavaScript中为什么无法正确表示某些四字节字符也懵懵懂懂,看了阮一峰大神的博客之后终于搞明白了,这篇是我的整理。目录1、什么是Unicode字符集2、UTF-8和UTF-163、JavaScript和UTF-164、参考链接1、什么是Unicode字符集我们都知道,在计算机里面,所有的内容都是以二进制的形式存在,那么可以很自然的想到,当我们要表示一个字符时,当然也是用一个二进制来表示,也就是说其实是用一个二进制数字来表示字符。但是问题是.原创 2021-02-08 17:13:17 · 533 阅读 · 0 评论