- 博客(67)
- 收藏
- 关注
原创 Git版本控制工具
版本控制能在软件开发中,确保由不同的人编辑同一程序文件能同步。可以帮助程序员进行代码的追踪、维护、控制等操作。使用比较广泛的有三个版本控制工具:CVS、SVN、Git第一个被大规模使用的版本控制工具,诞生于1985年;由荷兰阿姆斯特丹VU大学的Dick Grune教授实现的,也算是SVN的前身(SVN的出现就是为了取代CVS的)。因其命令行工具名为因此通常被简称为SVN;SVN由CollabNet公司于2000年资助并发起开发,目的是取代CVS,对CVS。...............
2022-09-01 00:41:12 1778
原创 深拷贝-浅拷贝-引用赋值的写法
这个obj4完全是一个新的对象,修改对象的内容,info的对象内容也不会跟着改变。,拷贝了一个新的对象obj2,修改里面的name,info不会跟着改变。对象的浅拷贝:只是浅层的拷贝,内部引入对象时,依然会相互影响;但是使用JSON方法有很大的缺陷就是当info里面有其他的值时。,将后面的info拷贝到前面的{}对象中,并且返回给obj3。如果有一个对象info,想要拷贝里面的内容,有三种方式。对象的深拷贝:两个对象不再有任何关系,不会相互影响;如果改的是对象,info的对象也会跟着发生变化。.......
2022-08-27 11:25:53 364
原创 JavaScript防抖和节流(从认识到理解到手写)
JavaScript是事件驱动的,大量的操作触发事件,加入到事件队列中处理。有一些比较频繁的事件处理就会造成性能损耗,我们就可以通过防抖和节流来限制事件频繁发生,所以防抖和节流也是性能优化的方式之一。前面说明了防抖和节流是用来限制事件频繁发生的,还不清除防抖和节流的概念,下面先来理解概念。
2022-08-24 22:22:42 2009 10
原创 Vue创建项目的步骤
可以有两种创建vue的方式,一种是vue CLI脚手架,一种是vite工具。npm更新到最新版本方法 npm install -g npm。检查一下npm和node版本。
2022-08-09 17:27:25 14435 2
原创 Vue学习之认识到应用(二)
vue学习、vue组件化、父传子、子传父、通信、插槽slot、具名插槽、作用域插槽provide、inject、setup
2022-07-25 11:18:23 912
原创 常用的正则表达式语法学习
正则表达式是一种字符串匹配利器,可以帮助我们搜索、获取、替代字符串。它是一种计算机科学的概念,不单单属于某种语言,正则表达式可以在Python、JavaScript、Java等语言中广泛使用。在JavaScript中,正则表达式使用RegExp类来创建,但也有对应的字面量的方式:正则表达式主要由两部分组成:模式(patterns)和修饰符(flags)......
2022-07-07 16:07:35 1041
原创 LocalStorage和SessionStorage
WebStorage主要提供了一种机制,可以让浏览器提供一种比cookie更直观的key、value存储方式:localStorage和sessionStorage的区别
2022-07-06 16:21:02 904
原创 事件队列、微任务与宏任务的理解和面试题
事件队列是一种数据结构,可以存放要执行的任务。它符合队列"先进先出"的特点。事件循环中并非只维护着一个队列,事实上是有两个队列:事件循环对于两个队列的优先级是怎么样的?1.main script中的代码优先执行;2.在执行任何一个宏任务之前(不是队列,是一个宏任务),都会先查看微任务队列中是否有任务需要执行 也就是宏任务执行之前,必须保证宏任务队列是空的; 如果不为空,那么就优先执行微任务队列中的任务(回调);Promise面试题一promise async await面试
2022-06-30 17:05:10 686
原创 await和async
用于声明一个异步函数:async是asynchronous单词的缩写,异步、非同步;sync是synchronous单词的缩写,同步、同时;async异步函数有很多种写法:异步函数的内部代码执行过程和普通的函数是一致的,默认情况下也是会被同步执行。异步函数有返回值时,和普通函数会有区别:如果我们在async中抛出了异常,那么程序它并不会像普通函数一样报错,而是会作为Promise的reject来传递;async函数另外一个特殊之处就是可以在它内部使用await关键字,而普通函数中是不可以的。await
2022-06-30 15:18:08 284
原创 Promise从认识到使用
我们如果想要调用函数,在这个函数发送网络请求。如果没有Promise,也确实可以自己实现,获取到对应的回调。但是,如果能定义一个标准,给予调用者承诺,可以回调数据。开发者就能使用统一的标准写出相似的代码,减少了学习成本。所以ES6的Promise就是用来解决异步代码的困境的。Promise是一个类,可以翻译成承诺、许诺、期约;当我们需要的时候,可以给予调用者一个承诺:过一段时间后给调用者回调数据。这种情况就可以创建一个Promise的对象;.........
2022-06-28 15:36:34 180
原创 Proxy-Reflect使用详解
如果你只是想作为一个普通的开发者,对这两个的理解可以不那么透彻,但是你想作为框架或组件的开发者,就需要对其有比较深的认识了。现在有一个需求:有一个对象,我们希望监听这个对象中的属性被设置或获取的过程。我们可以通过Object.defineProperty的存储属性描述符来对属性的操作进行监听。实际上vue2的响应式原理和这个类似。这样做的缺点:所以ES6中新增了一个Proxy类。............
2022-06-26 11:48:44 403 1
原创 JavaScript中Map的使用
ES6另外一个新增的数据结构是Map,用于存储映射关系。我们在ES6之前就可以用对象来存储映射关系了,那还需要Map吗?创建了一个Map对象,使用set将对象obj1作为key,用get获取obj1对应的value。Map的常见方法Map常见的属性Map常见的方法:Map也可以通过for of进行遍历。和Map类型的另外一个数据结构称之为WeakMap,也是以键值对的形式存在的。那么和Map有什么区别呢?WeakMap常见的方法有四个:...
2022-06-26 10:47:25 5683
原创 JavaScript中Set的使用
在ES6之前,我们主要使用数组、对象来存储数据;在ES6中新增了另外两种数据结构:Set、Map和WeakSet、WeakMap。Set有点类似于Array数组,但是和数组的区别是Set的元素不能重复。先不考虑Set的创建方法,通过案例来演示Set和Array数组的区别。我们需要通过Set的构造函数创建Set(没有字面量创建的方式)...............
2022-06-11 17:32:36 9907 2
原创 Symbol的基本使用
Symbol是一种通过Symbol函数来生成的独一无二的值,可以作为对象属性名。在ES6之前,对象的属性都是字符串,在ES6添加了Symbol的基本数据类型之后,就可以使用Symbol作为对象的属性值了。在ES6之前,对象的属性名都是字符串形式,很容易造成属性名的冲突;比如原来有一个对象,我们希望在其中添加一个新的属性和值,但是我们在不确定它原来内部有什么内容的情况下,很容易造成冲突,从而覆盖掉它内部的某个属性;Symbol就是为了解决上面的问题,来生成一个独一无二的值。Symbol即使多次创建值,它们也是
2022-06-11 15:56:49 2684
原创 JavaScript中展开语法(浅拷贝)
展开语法(Spread syntax): 可以在函数调用/数组构造时,将数组表达式或者string在语法层面展开; 还可以在构造字面量对象时, 将对象表达式按key-value的方式展开;展开运算符的使用场景在函数调用时使用将names数组展开作为参数,在调用foo函数的时候使用。在数组构造时使用将names数组展开作为newNames数组的一部分。在构建对象字面量的时候,也可以使用展开运算符这样算是一种浅拷贝。......
2022-06-11 15:20:55 260
原创 JavaScript中函数默认参数和剩余参数
函数默认参数在ES6之前,我们编写的函数参数是没有默认值的,所以我们在编写函数时,如果有下面的需求:ES6之前需要手动编写判断,但在ES6中,我们允许给函数一个默认值。函数剩余参数ES6中引用了rest parameter,可以将不定数量的参数放入到一个数组中: 如果最后一个参数是 ... 为前缀的,那么它会将剩余的参数放到该参数中,并且作为一个数组;那么剩余参数和arguments有什么区别呢?剩余参数必须放到最后一个位置,不然就会报错。...
2022-06-09 21:39:11 695
原创 模板字符串基本使用
模板字符串是ES6添加的一个新的字符串编写形式。在ES6之前,如果我们想要将字符串和一些动态的变量拼接到一起,是很麻烦的。需要添加多个+(加号),非常麻烦。在ES6允许我们使用字符串模板来嵌入JS的变量或者表达式来进行拼接。用``符号编写的字符串,称为模板字符串。在模板字符串中,我们可以通过反引号``内编写${变量}的形式将字符串和动态的变量拼接到一起。这样编写不仅更方便,代码还有更好的可读性。使用单引号或者双引号编写字符串,如果内容过多,一行装不下的时候。需要将字符串分割成几个部分,使用+(加
2022-06-09 21:03:55 11114
原创 搞懂JavaScript中var和let、const的区别与使用
在ES5中我们声明变量都是使用var关键字,在ES6开始新增了两个关键字let和const。var可以算作是js早期的一个设计缺陷,所以不妨先学习更为先进的用法,再区分它们之前的区别,搞清楚let和const解决了var声明变量的什么痛点。let关键字:const关键字:使用const定义一个常量,如果尝试去修改这个常量的值的话,会报错 但如果修改的是由const定义的引用类型(例如对象),可以修改对象里面的内容 原先的name值的zzz被修改成了qqq在同一个作用域中,使用var定义变
2022-06-07 16:58:13 2188 2
原创 ES6+的新特性
ES6中对对象字面量进行了增强,主要包括下面几部分:属性的简写:Property Shorthand在对象里面赋值,或者在函数返回对象的时候,经常会有a: a的代码出现,可以简写。方法的简写:Method Shorthand一种语法糖写法,更简洁。running是简写之前的,playing是简写之后的。这种写法不同于箭头函数,箭头函数是没有this的,而这种函数的简写是有this的。计算属性名:Computed Property Names可以将key的值作为属性名2.解构Destruct
2022-06-07 15:02:06 693
原创 JavaScript ES5中实现继承(对象和函数的原型,实现继承的方式)
JavaScript当中每个对象都有一个特殊的内置属性[[prototype]],这个特殊的对象可以指向另外一个对象。这个对象有什么用呢?怎么获取这个内置属性?所有的函数都有一个prototype的属性(注意不是__proto__)不是因为函数是一个对象,它才有prototype的属性,而是因为它是一个函数,才有这个特殊的属性。 new在内存中创建一个新的对象,这个对象内部的[[prototype]]属性会被赋值未该构造函数的prototype属性。也就意味着我们通过Person构造函数创建出来的所有
2022-06-04 20:42:12 121
原创 JavaScript对象的增强知识
对属性操作的控制在之前我们的属性都是直接定义在对象内部,或者直接添加到对象内部的:但是这样来做的时候我们就不能对这个属性进行一些限制:比如这个属性是否是可以通过delete删除的,这个属性是否在for-in遍历的时候被遍历出来呢?如果我们想要对一个属性进行比较精准的操作控制,那么我们就可以使用属性描述符。直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。可接收三个参数:返回值:属性描述符的类型有两种:......
2022-06-04 17:47:40 202
原创 JavaScript严格模式
JavaScript历史的局限性所以在ECMAScript5标准中,JavaScript提出了严格模式的概念:严格模式对正常的JavaScript语义进行了一些限制:怎么开启严格模式?严格模式支持粒度话的迁移(可以非常精细控制哪些需要开启严格模式,哪些不需要开启)严格模式可以在文件或者函数开头使用use strict来开启3.严格模式限制JavaScript被设计为新手开发者更容易上手,所以有时候本来错误语法,被认为也是可以正常被解析的;但是这种方式可能给带来留下来安全隐患; 在严格模式下,这种失
2022-06-04 16:01:29 425
原创 组合函数概念的理解
组合函数是在JavaScript开发过程中一种对函数的使用技巧、模式:组合函数的封装上面实现的compose函数比较简单,我们需要考虑更加复杂的情况,比如传入了更多的函数,在调用compose函数时,传入了更多参数。...
2022-06-04 14:48:11 736
原创 柯里化理解与案例
柯里化也是属于函数式编程里面非常重要的概念;维基百科的解释:总结:只传递给函数一部分参数来调用它,让它返回一个函数去处理剩余的参数;这个过程就称之为柯里化。柯里化是一种函数的转换,将一个函数从可调用的f(a, b, c)转换为可调用的f(a)(b)(c),柯里化不会调用函数,它只是对函数进行转换。也可以使用箭头函数让代码更加简洁......
2022-06-04 11:44:52 445
原创 JavaScript纯函数
函数式编程中有一个概念叫纯函数,JavaScript符合函数式编程的范式,所以也有纯函数的概念。纯函数的维基百科定义:副作用(side effect)其实本身是医学的一个概念,比如我们经常说吃什么药是为了治病,可能会产生一些副作用;在计算机科学中,也引用了副作用的概念,表示在执行一个函数时,除了返回函数值之外,还对调用函数产生了附加的影响, 比如修改了全局变量,修改参数或者改变外部的存储; 纯函数在执行的过程中就是不能产生副作用,副作用往往是产生bug的温床。一个对数组操作的两个函数,看一下哪些是纯函数:s
2022-06-04 11:02:39 294
原创 JavaScript函数的增强知识(argument、纯函数)
我们知道JavaScript中函数也是对象,那么对象中就可以有属性和方法属性name:一个函数的名称我们可以通过name来访问;属性length:属性length用于返回函数参数的个数:rest参数是不参与参数的个数的;2.认识argumentsarguments是一个对应于传递给函数的参数的类数组对象。arguments转Array在开发中,我们经常需要将arguments转成Array,以便使用数组的一些特性。常见的转化方式1.遍历arguments,添加到一个新数组中。2.调用数
2022-06-03 21:57:57 237
原创 JavaScript中的闭包
闭包是JavaScript中一个非常容易让人迷惑的知识点。对于那些有一点JavaScript使用经验但从未真正理解闭包概念的人来说,理解闭包可以看作是某种意义上的重生,但是需要付出非常多的努力和牺牲才能理解这个概念。JavaScript的函数式编程JavaScript是支持函数式编程的,在JavaScript中,函数是非常重要的,并且是一等公民;那么就意味着函数的使用是非常灵活的;函数可以作为另外一个函数的参数,也可以作为另一个函数的返回值来使用。闭包的定义分成两个:在计算机科学中和JavaScript中。
2022-06-03 11:46:34 147
原创 JavaScript内存管理
不管什么样的编程语言,在代码的执行过程中都是需要给它分配内存的,有些编程语言需要手动管理内存,某些编程语言可以自动帮助我们管理内存。内存管理的生命周期我们创建的原始值、对象、函数都会占用内存,但是JavaScript不需要手动进行管理,JavaScript引擎会帮助我们处理好。JavaScript会在定义数据时为我们分配内存 内存的大小是有限的,当内存不再需要的时候,我们需要对其进行释放。现代的编程语言都是有自己的垃圾回收机制:GC算法有几种实现方案:...
2022-06-03 10:59:07 383
原创 作用域提升面试题
var n = 100function foo() { n = 200}foo()console.log(n) //200function foo() { console.log(n) //undefined var n = 200 console.log(n) //200}var n = 100foo()var a = 100function foo() { console.log(a) //undefined retur.
2022-05-31 18:18:25 119
原创 深入JavaScript的运行原理
1.初始化全局对象js引擎在执行代码之前,会在堆内存中创建一个全局对象:Global Object(GO)该对象(GO) 所有的作用域(scope)都可以访问 里面会包含Date、Array、String、Number、setTimeout、setInterval等 其中还有一个window属性指向自己2.执行上下文(Execution Contexts)js引擎内部有一个执行上下文栈(Execution Context Stack,简称ECS),它是用于执行代码的调用栈。全局的代码块
2022-05-31 16:47:22 1041
原创 浏览器渲染原理
默认情况下服务器会给浏览器返回index.html文件,所以解析html是所有步骤的开始How Browsers Work: Behind the scenes of modern web browsers - HTML5 Rocks1.解析html构建DOM Tree2.生成css规则在解析的过程中,如果遇到css的link元素,那么会由浏览器负责下载对应的css文件。下载css文件不会影响DOM的解析浏览器下载完css文件后,就会对css文件进行解析,解析出对应的规...
2022-05-31 12:06:18 107
原创 this面试题
如果没有学习过this的指向的话,可以简单学习一下。JavaScript中this指向不是很详细,但是大部分的情况都能包括到了,也可以在做题的过程随时复习。this指向规则默认绑定 函数独立调用 this指向window 隐式绑定 通过某个对象进行调用 this指向调用的那个对象 显式绑定 使用call、apply、bind方法进行绑定 this指向绑定的那个对象 new绑定 使用new关键字来调用函数的时候 this指向调用的那个对象 箭头函数没有this 所以会往上层作用域查找.
2022-05-30 12:11:02 1047
原创 箭头函数的使用
箭头函数是ES6之后增加的一种编写函数的方法,并且它比函数表达式要更加简洁。箭头函数不会绑定this、arguments属性; 箭头函数不能作为构造函数来使用箭头函数的编写形式()函数的参数 {}函数的执行体nums.forEach((item, index, arr)=>{})箭头函数的编写优化优化一:如果只有一个参数()可以省略nums.forEach(item => {})优化二:如果函数执行体中只有一行代码,那么可以省略大括号并且.
2022-05-27 15:05:40 383
原创 JavaScript中this指向
函数在调用时,JavaScript会默认给this绑定一个值; this的绑定和定义的位置(编写的位置没有关系); this的绑定和调用方法以及调用的位置有关系; this是在运行时被绑定的1.默认绑定独立函数调用的情况下,this指向window,例如function foo() { console.log(this); } foo() //window哪怕是多层调用,只要是使用默认调用的方法,this的指向都会是window对象..
2022-05-27 11:48:15 253
原创 JSON的基本使用
1.json的由来json是一种重要的数据格式,不是编程语言,一种可以在服务器与客户端之间传输的数据格式。全称是JavaScript Object Notation(JavaScript对象符号)json是由Douglas Crockford构想和设计的一种轻量级资料交换格式,算是Javascript的一个子集 虽然json提出来的时候是主要应用于JavaScript中,但是目前已经独立于编程语言,可以在各个编程语言中使用其他的传输格式XML:在早期的网络传输中主要是使用XML来进行数据
2022-05-23 15:19:04 289
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人