Javascript
文章平均质量分 66
JJYdesu
这个作者很懒,什么都没留下…
展开
-
JS深拷贝的实现
原文再续,书接上一回(【JavaScript笔记06】赋值、浅拷贝、深拷贝),在这篇文章实现一下深拷贝的方法。首先来个最基本的拷贝,创建一个新对象,遍历需要克隆的对象,将需要克隆对象的属性依次添加到新对象上即可,但是面对多层的对象就不行了。let obj1 = { name:'jjy', age:23, child:{ id:4 }}function t1(source){ let cloneTarget = {} for(const原创 2021-12-16 15:06:32 · 513 阅读 · 0 评论 -
JavaScript中基本类型和引用类型
基本类型:String,Number,Boolean,Null,Undefined,Symbol引用类型:Object,Array,Function这两种类型最主要的区别在于声明变量时候内存分配不同,对基本类型而言,它的变量值是直接存储在栈内存中的,比如:var a = 10var b = ab = 20这里声明了一个变量a,它的值就直接放在了栈内存中,而复制则是直接拷贝了一份到b,改变b不影响a的值。对于引用类型而言,声明变量的时候,栈内存存储的是值所在的内存地址,而真正的值存放在堆内存原创 2021-12-15 16:04:13 · 1491 阅读 · 1 评论 -
为什么const定义的数组和对象的值可以变
总所周知在js中var、let和const的区别是,var只有全局作用域和函数作用域的的概念,如果用var在函数里面声明变量,则这个变量属于当前函数的作用域,而如果是在函数外的任何地方声明,则属于全局作用域。而let是块级作用域。var存在变量提升,无论var出现在作用域的哪个位置,这个声明都属于当前的整个作用域,在任何地方都能访问到,而let没有。var声明的变量可以重复声明,而let不可以。const一般用来声明常量,且其值不可变。但是在实际使用的时候会发现,const的值其实是可以"变"的原创 2021-12-15 11:09:55 · 4012 阅读 · 0 评论 -
JS判断一个对象是否为数组类型
总所周知JavaScript在一般情况下可以利用typeof来判断一个数据的类型,除了一些特殊情况,比如typeof null会输出object。这里要说的是另一种情况,用typeof判断数组也会输出object。首先创建一个数组let arr = [1,2,3]//或 let arr = new Array([1,2,3])1.instanceofconsole.log(arr instanceof Array) // true2.Array.isArray()console.log(原创 2021-11-29 21:41:29 · 337 阅读 · 0 评论 -
JavaScript 继承
文章目录一、原型链继承二、构造函数继承三、组合继承(原型+构造函数)四、原型式继承五、寄生式继承六、寄生组合式继承继承是面向对象编程的一种独特的编程方式,在JavaScript里面有六种实现继承的方法。父类function Animal(name){ this.name = name || 'animal' this.sum = function(){ console.log(this.name + '正在睡觉') }}Animal.prototype.ag原创 2021-11-26 15:42:49 · 417 阅读 · 0 评论 -
JavaScript中的this小总结
之前也有一篇文章讲过JavaScript的this指向问题,不过感觉那篇讲得比较繁琐,这篇文章就简单再总结一下各种情况下this的指向,大体来说,this是指向代码调用者/执行者,所以在一个对象里面直接this,它指向的就是window:var age = 24var obj = { age:18, obj2:{ age:this.age }}console.log(obj.obj2.age) //24现在总结一下四种函数调用情况下this的指向。原创 2021-09-05 13:41:19 · 184 阅读 · 1 评论 -
JavaScript的事件循环(宏任务与微任务)
JavaScript是一门单线程语言,所以在同一时间都只有一个任务在执行,其异步操作时通过事件循环机制来实现的,其中异步操作又分为宏任务和微任务:宏任务微任务scriptprocess.nextTicksetTimeout、setIntervalPromise.then/catch/finallyI/O……大体上这些任务的执行顺序为主线程—>微任务—>宏任务,执行过程中有三个部分组成,分别是执行栈、宏任务队列(消息队列)和微任务队列,流程图如原创 2021-09-05 09:48:36 · 212 阅读 · 0 评论 -
【Javascript笔记07】ES6中的Class
目录ES6中的Class一、class的使用二、类的原型三、getter和setter四、this的指向五、继承ES6中的Class一、class的使用class就是类,是一般面向对象语言所具有的特性,类里面可以包含属性和方法,在JavaScript中也有类似的东西。在ES6之前,通过“类”的概念生成实例对象的方法是通过构造函数实现的:function Point(x, y) { this.x = x; this.y = y;}Point.prototype.toString = fu原创 2021-08-24 17:37:04 · 241 阅读 · 0 评论 -
【JavaScript笔记06】赋值、浅拷贝、深拷贝
目录赋值、浅拷贝、深拷贝一、区别二、实现2.1 浅拷贝实现2.2 深拷贝实现三、总结赋值、浅拷贝、深拷贝一、区别在许多语言中都有浅拷贝与深拷贝,JavaScript也不例外,他们的区别很简单。赋值:对象赋值时,实际上赋的是对象在栈中的地址,而不是在堆中的数据,两个对象指向同一个存储控件,无论哪个对象发生改变其改变的都是同一个存储空间的内容。浅拷贝:创建一个新的对象,把源对象的值拷贝进来,这里会有两种情况:对于基本类型变量,拷贝的是它的值。对于引用类型变量,则拷贝的是内存地址。原创 2021-03-12 21:28:33 · 230 阅读 · 0 评论 -
【JavaScript笔记05】遍历方法小结
目录一、forEach二、map三、filter四、find五、every & some六、reduceES6中有六种方法遍历数组(除了最原始的for循环遍历),而且它们都不会改变原始数组,下面总结一下。一、forEach数组的元素作为回调函数的参数传到函数内部使用。let list = ['jjy','aaa','bbb']list.forEach((a)=>{ console.log(a)})注意没有返回值。二、mapmap将数组映射成另一个数组,用返回值的形式。原创 2021-03-12 19:46:38 · 234 阅读 · 0 评论 -
【JavaScript笔记04】JS原型
目录原型1. [[Prototype]]2.“类”2.1 “构造”2.2 "继承"2.3 "反射"原型1. [[Prototype]]JS中的对象有一个特殊的[[Prototype]]内置属性,实际上就是对于其他对象的引用,var myObject = { a:2}console.log(myObject.a) //打印2对于默认的[[Get]]操作来说,如果无法再对象本身找到需要的属性,就会继续访问对象的[[Prototype]]链。var anotherObject = {原创 2020-12-23 21:09:30 · 174 阅读 · 0 评论 -
【JavaScript笔记03】JS的对象
这里写目录标题1.对象1.1 类型1.2 对象拷贝1.3 属性描述符1.4 Getter和Setter1.5 存在性1.6 遍历2.混合对象“类”2.1 显式混入2.2 隐式混入2.3 小结1.对象1.1 类型六种语言类型:stringnumberbooleannullundefinedobject但前五种本身并不是对象。内置对象:StringNumberBooleanObjectFunctionArrayDateRegExpError可以当作构造函数来用,原创 2020-12-17 21:41:53 · 352 阅读 · 0 评论 -
【JavaScrip笔记02】this的那些事
文章目录1.关于this对this的一些误解2.this全面解析绑定规则优先级this词法1.关于this对this的一些误解误解一:把this理解成指向函数自身function foo(num){ console.log('foo:' + num) this.count++}foo.count = 0var ifor(i=0;i<10;i++){ if(i>5){ foo(i) }}console.log(foo.co原创 2020-12-13 10:00:35 · 94 阅读 · 0 评论 -
【JavaScript笔记01】作用域和闭包
目录1.作用域查找类型异常2.词法作用域欺骗词法3.函数作用域和块作用域隐藏内部实现规避冲突块作用域let4.提升5.作用域闭包循环和闭包模块1.作用域引擎 - 负责整个JS程序的编译以及执行过程。编译器 - 负责语法分析及代码生成。作用域 - 负责收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套严格的规则,确定当前执行的代码对这些标识符的访问权限。所以,作用域就是更具名称查找变量的一套规则。查找类型LHS查询:查找的目的是对变量进行赋值。RHS查询:目的是获取变量的值。原创 2020-12-10 13:39:32 · 205 阅读 · 0 评论