- 博客(12)
- 收藏
- 关注
原创 lodash源码阅读5-----------uniq
用法数组去重uniq([2, 1, 2]) // => [2, 1]解析首先来看它的函数入口,没什么说的,就是判断数组是否有意义,有的话调用baseUniq方法function uniq(array) { return (array != null && array.length) ? baseUniq(array) : []}接下来看看,baseUniq方法大概逻辑就是,通过遍历数组,将新数组中没有的元素放入新的数组,逻辑不难,所以直接注释在
2021-03-24 17:27:48
155
原创 lodash源码阅读4-----------intersection
用法intersection是一个用来求数组交集的方法,它可以接收多个数组,还能接受类数组的对象。 intersection([2, 1], [2, 3]) // => [2]解析首先来看它的函数入口,主要是通过castArrayLikeObject方法来过滤一些非法传入,这里比较mapped[0] === arrays[0]是为了确认传入的第一个参数是合法的,如果不合法那么交集必定为空集就不用再进行后面的遍历。然后我们来看看castArrayLikeObject方法。//这里通过剩余
2021-03-21 22:30:03
322
原创 lodash源码阅读3-----------pick
用法pick方法类似于数组的filter方法,它可以从一个对象中,提取出对应属性的值,并组合成一个新的对象返回。它接受两个参数,被提取属性的对象,属性名称数组。 * const object = { 'a': 1, 'b': '2', 'c': 3 } * * pick(object, ['a', 'c']) * // => { 'a': 1, 'c': 3 }解析由于方法的调用栈很长,所以我们一个一个来阅读。首先看看pick方法,内容很简单,传入空对象就返回一个{ },接下来我们看
2021-03-12 11:33:10
481
原创 lodash源码阅读2-----------slice
写在前面毕业在找工作的时候,有遇到过一道面试题 : 请实现数组的slice方法当时觉得,这个方法实现起来不容易吗,于是我交了下面的答卷function mySlice(arr,start,end){ var newArr = []; for(var i= start ; i< end ; i ++){ newArr.push(arr[i]); } return newArr;
2021-03-04 15:51:40
215
1
原创 lodash源码阅读1-----------reduce
1.源码function reduce(collection, iteratee, accumulator) { const func = Array.isArray(collection) ? arrayReduce : baseReduce const initAccum = arguments.length < 3 return func(collection, iteratee, accumulator, initAccum, baseEach)}function arra
2021-02-26 15:21:37
429
2
原创 dom属性和JS中的dom操作
DOM 操作1.创建新节点createDocumentFragment() //创建一个 DOM 片段createElement() //创建一个具体的元素createTextNode() //创建一个文本节点2.添加、移除、替换、插入appendChild() //把节点插入到父节点的末尾removeChild() //删除dom节点replaceChild() //替换dom节点insertBefore() //在已有的子节点前插入一个新的子节点3.比较isSameNod
2020-09-03 16:32:35
291
原创 JS事件流,事件处理,事件绑定,事件委托
事件流1.事件冒泡IE 的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档),最后到document。2.事件捕获Netscape Communicator 团队提出的另一种事件流叫做事件捕获(event capturing)。事件捕获的思想是不太具体的节点应该更早接收到事件,而最具体的节点应该最后接收到事件。事件捕获的用意在于在事件到达预定目标之前捕获它。3.DOM事件流“DOM2级
2020-08-06 15:40:02
164
原创 深入理解JS的原型,原型链,继承
原型创建对象的方法字面量创建构造函数创建Object.create()var o1 = { name: "value" };var o2 = new Object({ name: "value" });var o3 = new M();var P = { name: "o4" };var o4 = Object.create(P);使用构造函数function Person(name, age, job) { this.name = name; this.age = ag
2020-07-22 17:42:16
132
原创 js中的预编译,作用域链
预编译1.js代码的执行步骤语法分析:主要扫描代码有没有语法上的错误(比如少些括号,写了中文符号)预编译:进行变量的声明提升,函数整体提升,函数执行前一刻的准备工作。解释执行:对js代码进行执行,解释一行,执行一行。2.预编译的前奏暗示全局变量:任何变量未经声明就赋值,此变量归全局所有。一切全局变量都是window的属性例如:var a = 100;console.log(window.a); //100if(1){ a = 10;}console.log(w
2020-07-21 17:50:46
136
原创 JS类型检测,类型转换
一.类型检测1.typeof方法typeof是一个运算符,有2种使用方式:typeof(表达式)和typeof 变量名,第一种是对表达式做运算,第二种是对变量做运算。typeof运算符的返回值包括如下几种:‘undefined’ --未定义的变量或值‘boolean’ --布尔类型的变量或值‘string’ --字符串类型的变量或值‘number’ --数字类型
2020-07-20 15:24:58
170
原创 CSS中的nth-child和nth-of-type选择器
CSS中的nth-XXX选择器我们知道,在CSS中,选择相同类名,相同标签的子级元素或者兄弟元素都很快捷方便,但是如果要有目的性的去筛选一些子级或者同级元素,那么,就要用到这里所说的选择器nth-child和nth-last-child这个选择器可以选择同级的一类标签,或者类。根据一些数学规则:an+b:代表匹配父容器下面中第an+b个子元素,a,b都可以为0比如:<head&...
2019-11-13 10:11:24
815
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人