
js
文章平均质量分 59
记录js相关只是内容
煸橙干儿~~
这个作者很懒,什么都没留下…
展开
-
js面试---垃圾回收与内存泄漏
JavaScript代码运行时,需要分配内存空间来储存变量和值。当变量不在参与运行时,就需要系统收回被占用的内存空间,这就是垃圾回收。虽然浏览器可以进行垃圾自动回收,但是当代码比较复杂时,垃圾回收所带来的代价比较大,所以应该尽量减少垃圾回收。浏览器通常使用的垃圾回收方法有两种:标记清除,引用计数。原创 2024-04-26 17:43:12 · 924 阅读 · 0 评论 -
js面试---面向对象
但是构造函数存在一个缺点就是,造成了不必要的函数对象的创建,因为在 js 中函数也是一个对象,因此如果对象属性中如果包含函数的话,那么每次都会新建一个函数对象,浪费了不必要的内存空间,因为函数是所有的实例都可以通用的。它的一个缺点和工厂模式一样,无法实现对象的识别。(2)第二种方式是使用借用构造函数的方式,这种方式是通过在子类型的函数中调用超类型的构造函数来实现的,这一种方法解决了不能向超类型传递参数的缺点,但是它存在的一个问题就是无法实现函数方法的复用,并且超类型原型定义的方法子类型也没有办法访问到。原创 2024-04-25 11:03:11 · 845 阅读 · 0 评论 -
js面试---this/call/apply/bind
这四种方式,使用构造器调用模式的优先级最高,然后是 apply、call 和 bind 调用模式,然后是方法调用模式,然后是函数调用模式。this 是执行上下文中的一个属性,它指向最后一次调用这个方法的对象。在实际开发中,this 的指向可以通过四种调用模式来判断。call()和apply()作用一样,区别仅在于传入参数的形式的不同。原创 2024-04-25 11:00:42 · 959 阅读 · 0 评论 -
js面试---闭包、作用域及作用域链、执行上下文
闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,创建的函数可以访问到当前函数的局部变量。闭包的作用:a、使我们在函数外部能够访问到函数内部的变量。通过使用闭包,可以通过在外部调用闭包函数,从而在外部访问到函数内部的变量,使用这种方法来创建私有变量b、使已经运行结束的函数上下文中的变量对象继续留在内存中let a = 1A()B() // 1。原创 2024-04-24 11:34:47 · 1381 阅读 · 0 评论 -
js面试---原型与原型链
在JavaScript中是使用构造函数来新建一个对象的,每一个构造函数的内部都有一个 prototype 属性,它的属性值是一个对象,这个对象包含了可以由该构造函数的所有实例共享的属性和方法。当访问一个对象的属性时,如果这个对象内部不存在这个属性,那么它就会去它的原型对象里找这个属性,这个原型对象又会有自己的原型,于是就这样一直找下去,也就是原型链的概念。JavaScript 对象是通过引用来传递的,创建的每个新对象实体中并没有一份属于自己的原型副本。,所以,原型链的终点是。原创 2024-04-23 11:27:04 · 255 阅读 · 0 评论 -
js面试---ES6
块级作用域:let和const具有块级作用域,var不存在块级作用域。块级作用域解决了内层变量可能覆盖外层变量,以及用来计数的循环变量泄露为全局变量的问题。 变量提升:var存在变量提升,let和const不存在变量提升(只能在声明后使用,否则会报错) 给全局添加属性:浏览器的全局对象是window,Node的全局对象是global。var声明的变量为全局变量,并且会将该变量添加为全局对象的属性,但let和const不会。 重复声明:var可以重复声明变量,let和原创 2024-04-11 17:08:41 · 1480 阅读 · 0 评论 -
js中如何进行隐式类型转换
ToPrimitive 方法,是js中每个值隐含的自带方法,用来将值转换为基本类型。如果值为基本类型,则返回本身,否则,进行转换,返回基本类型值。操作符的两边至少一个string类型变量时,两边的变量都会被隐式转换为字符串;默认情况下,如果对象为Date对象,则type默认为string;其他情况下,type默认为number。调用obj的toString方法,如果为原始值,则返回,否则,进行下一步;调用obj的valueOf方法,如果为原始值,则返回,否则,进行下一步;其他情况下,转换为数字再比较。原创 2024-04-11 10:43:58 · 390 阅读 · 0 评论 -
js的包装类型
在js中,基本数据类型是没有属性和方法的,但是为了便于操作基本数据类型的值,在调用基本类型的属性和方法时,js会在后台隐式地将基本数据类型的值转换为对象。在访问"abc".length时,js将'abc'在后台转换成String('abc'),然后再访问其length属性。js也可以用Object函数显示地将基本类型转换为包装类型。被包裹成包装类型后就成了对象,所以其非值为。,所以循环体中的内容不会运行。虽然包裹的基本类型是。原创 2024-04-11 10:20:06 · 306 阅读 · 0 评论 -
为什么0.1+0.2!==0.3
在二进制科学表示法中,双精度浮点数的小数部分最多只能保留52位,再加上前面的1,其实就是保留53位有效数字,剩余的需要舍去,遵从“0舍1入”的原则。对js来说,这个值通常为2-52,ES6为我们提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,则可以判定0.1+0.2==0.3。计算机是通过二进制的方式存储数据的,所以计算机在计算0.1+0.2的时候,实际上是计算的两个数的二进制的和。原创 2024-04-11 09:59:56 · 190 阅读 · 0 评论 -
js面试---数据类型
对象、数组和函数是引用数据类型。null的值是机器码null指针(null指针的值全是0),即null的类型标签时000,和Object的类型标签一样,所以typeof null 的值是Object。Object.is()来进行相等判断时,一般情况下和三等号的判断相同,它处理了一些特殊的情况,比如 -0 和 +0 不再相等,两个 NaN 是相等的。isNaN接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的值都会返回为true,非数字值传入也会返回true,会影响NaN的判断。原创 2024-04-10 17:29:12 · 1258 阅读 · 0 评论 -
浏览器同源策略及跨域问题
一种基于HTTP头的机制,该机制通过允许服务器标示除了它自己以外的其他源(协议、域名、端口),使得浏览器允许这些源访问加载自己的资源。:同源策略是一个重要的安全策略,它用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。:Web内容的源由用于访问它的URL的方案(协议)、主机名(域名)和端口定义。只有当协议、主机和端口都匹配时,两个对象才具有相同的源。:网页加载时所在源,和ajax请求时的源(协议、域名、端口号)全部相同即为同源。:从一个源的文档/脚本,加载另一个源的资源就产生了跨域。原创 2024-03-14 16:11:05 · 794 阅读 · 0 评论 -
宏任务及微任务
js有一个基于事件循环的并发模型,事件循环负责执行代码、收集和处理事件,以及执行队列中的子任务。:由浏览器环境执行的异步代码,js脚本执行事件,如setTimeout、setInterval、ajax、用户交互事件等。简单来说,就是先执行第一个宏任务,在执行完当前宏任务后,执行微任务队列,执行完,再执行宏任务。:执行和收集异步任务的模型(机制),在调用栈空闲时,会反复调用任务队列里回调函数的执行机制,就叫事件循环。3、当执行栈空闲时,清空微任务队列,再执行下一个宏任务,依次循环。原创 2024-03-14 15:08:10 · 482 阅读 · 0 评论 -
Promise语法
为了解决回调地狱问题;依靠then,在then的回调函数,返回一个promise对象,就可以在then后面继续.then了。2、已兑现(fulfilled):操作成功完成,then()、resolve()执行完成。3、已拒绝(rejected):操作失败,catch()、reject()执行完成。js中的异步代码:setTimeout,setInterval,事件,ajax等。异步代码:调用后耗时,不阻塞代码继续执行,在将来完成后触发一个回调函数。回调地狱可读性差,异常无法补货,耦合性差,牵一发而动全身。原创 2024-03-14 12:16:12 · 480 阅读 · 0 评论 -
防抖和节流
d、定时器中调用函数,定时器执行完成后,清空定时器。1、使用lodash库,_.throttle(函数名,时间)b、判断是否有定时器,有则不开启新的定时器。搜索框搜索输入(只需用户最后一次输入完,再发送请求);c、没有则开启定时器,存定时器变量。c、没有则开启定时器,存定时器变量。a、声明一个定时器变量=null。a、声明一个定时器变量=null。b、判断是否有定时器,有则清除。1、使用lodash库,_.debounce(函数名,时间)指单位时间内,频繁触发事件,指单位之间内,频繁触发事件,原创 2024-03-14 11:34:38 · 768 阅读 · 0 评论 -
改变this的指向的方法
语法:fun.call(thisArg,arg1,arg2...)apply 主要跟数组有关系,比如使用 Math.max() 求数组的最大值。thisArg:在fun函数运行时指定的this值。thisArg:在fun函数运行时指定的this值。thisArg:在fun函数运行时指定的this值。返回值就是函数的返回值(因为它就是个调用函数)返回值就是函数的返回值(因为它就是个调用函数)arg1,arg2:传递的其他参数。arg1,arg2:传递的其他参数。:传递的其他参数,必须以数组形式。原创 2024-03-13 17:45:27 · 445 阅读 · 0 评论 -
js的异常处理
new Error() 配个throw使用,能设置更详细的错误信息。try 试试 catch 拦住错误 finally 最后。try出现错误后,会执行catch,并捕获错误信息;debugger可以通过设置断点,进行调试。throw抛出异常信息,程序也会终止执行;finally是不管有没有错误,都会执行。将预估可能发生错误的代码放在try中;throw后面跟的是错误提示信息;原创 2024-03-13 12:19:25 · 663 阅读 · 0 评论 -
浅谈js的深拷贝与浅拷贝
函数内部自己调用自己,就是递归,这个函数就是递归函数。如果拷贝对象是基本数据类型,则拷贝的是值;如果拷贝对象是引用类型的,则复制的是地址,修改任何一个对象,另一个对象都会发生变化。是拷贝多层,创建一个一模一样的对象,但不共用内存,不拷贝地址,且新旧对象的修改,不会影响到对方。d、如果属性值是基本数据类型,则直接赋值即可。a、封装函数,先判断拷贝的是数组还是对象。c、如果属性值是引用数据类型,则再次递归。是把对象拷贝给一个新的对象,只复制指向某个对象的指针,不复制对象本身。1、JSON序列化方式。原创 2024-03-13 12:09:30 · 432 阅读 · 0 评论 -
原型对象、原型、原型链
实例对象可以直接访问原型对象中的函数,先找实例对象属性或函数,找不到会再找原型对象中的的属性和函数。——每个原型对象里面多有个constructor属性(constructor构造函数),该属性指向该原型对象的构造函数。js规定,每一个构造函数都有一个prototype属性,指向另一个对象,我们称之为原型对象。原型对象可以挂载函数,对象实例化不会多次创建原型对象里面的函数,节约内存;3、如果还没有,就查找原型对象的原型对象,就是Object的原型对象。尽量不要修改这个属性,否则会对性能产生非常严重的影响。原创 2024-03-12 15:50:20 · 529 阅读 · 0 评论 -
js--构造函数
2、利用js内置构造(Object,Array,String,Number)函数。构造函数是一周你那个特殊的函数,主要用来创建对象,可以通过构造函数快速创建多个类似对象。获取对象中所有属性值,返回的是一个数组。获取对象中所有属性,返回的是一个数组。构造函数的首字母要大写,构造函数需要与new一起使用。迭代数组,返回新数组。2、构造函数this指向新对象。:实例对象中的属性和方法(实例属性和实例方法):构造函数的属性和方法(静态属性和静态方法)实例化构造函数的时候,没有参数可省略()。3、执行构造函数代码。原创 2024-03-11 17:51:11 · 414 阅读 · 0 评论 -
ES6基本语法及常用方法
reduce是一种数组的归并方法,会对数组进行遍历,reduce函数的第一个参数得到的是迭代计算后的结果。检测数组所有元素是否都满足指定条件,如果是返回true,反之,返回false。检测数组中是否有元素满足指定条件,如果是返回true,反之,返回false。a、求和--如果没有起始值,则上一次值,为数组的第一个元素的值。可以将数组中的值或对象的属性取出,赋值给其他变量。变量少,值多,多出来的值会被忽略掉。创建一个新数组,存放筛选出的满足条件的所有元素,b、求和--如果有起始值,则上一次值,为初始值。原创 2024-03-11 17:10:32 · 1814 阅读 · 0 评论 -
arguments和剩余参数(...)
是函数内部内置的对象,是一个伪数组,包含了调用函数是传入的所有实参。可用来动态获取函数的实参。获取多余的实参,并形成一个真数组,用以解决形参和实参不匹配的情况。a、...是语法符号,置于最末函数形参之前,用于获取多余的实参。b、借助...获取的剩余实参,是个真数组。原创 2024-03-07 17:04:43 · 524 阅读 · 0 评论 -
变量提升,函数提升
函数提升就是将当前函数的声明提升到当前作用域的最前方,只提升声明,不提升调用。因为n是全局变量,所以将变量n的声明提至最前方,在定义之前就可以访问到。变量提升就是将变量提至当前作用域的最前面,原创 2024-03-07 16:54:30 · 455 阅读 · 0 评论 -
js---闭包
闭包就是一个函数对周围状态的引用捆绑在一起,闭包可以让开发者从内部函数访问外部函数的作用域。简单来说,闭包让你可以在一个内层函数中访问到其外层函数的作用域。闭包可以实现数据的私有化,避免全局污染,外层函数也可以访问里层函数的变量。原创 2024-03-07 16:39:28 · 407 阅读 · 0 评论 -
js-作用域及作用域链
是变量或值在代码中可用性的范围,提高了程序逻辑的局部性,增加了程序的可靠性,减少了名字冲突。可分为全局作用于和局部作用域。注:如果函数内部,变量没有声明就直接赋值,也可当全局变量看,但不推荐此用法。:作用域所有代码执行的环境,整个script标签或整个js文件。嵌套关系的作用域串联起来形成了作用域链。:局部作用域的变量,只能在当前局部内部访问和修改。:全局作用域的变量,在任何区域都可以访问和修改;:局部作用域又可分为。(作用于函数内部),({}大括号内部)。原创 2024-03-07 15:34:44 · 458 阅读 · 0 评论 -
BOM浏览器对象模型
如下图,JavaScript主要由ECMAScript和Web APIs组成,其中规定了ECMAScript规定了js基础语法的核心知识,如变量、分支语句、循环语句、对象等;Web APIs由DOM(用来操作HTML文档的文档对象模型)和BOM(用来操作浏览器窗口的浏览器对象模型)组成。原创 2024-03-07 15:16:40 · 619 阅读 · 0 评论 -
回流和重绘
1、解析(parser)HTML,生成DOM树;2、同时解析css,生成样式规则;3、根据DOM树和样式规则,生成渲染树;4、进行布局Layout(回流),根据生成的渲染树,得到节点的几何信息(位置、大小等);5、进行绘制Painting(重绘),根据计算和获取的信息进行整个页面的绘制;6、展示再页面上。当渲染树中部分或全部元素的尺寸、结构、布局等发生改变时,浏览器就会重新渲染部分或全部文档的过程。原创 2024-03-06 17:27:26 · 397 阅读 · 0 评论 -
js--DOM树简介
DOM树将HTML文档以树状结构直管段表现出来,也称为节点树。原创 2024-03-06 17:10:22 · 616 阅读 · 0 评论 -
页面加载事件、页面滚动事件、页面尺寸事件
加载外部资源(如图片、外联CSS、JS等),加载完毕时触发的事件。load:window.addEventListener('load',function() { }) ==> 监听页面所有资源加载完毕。DOMContentLoaded:window.addEventListener('DOMContentLoaded',function() { }) ==> 当初始的HTML文档被完全加载和解析之后就触发,无需等待样式表、图像等完全加载。原创 2024-03-06 16:47:24 · 871 阅读 · 0 评论 -
事件流、事件捕获、事件冒泡、事件委托
事件流指的是事件完整执行过程中的流动路径,分为捕获阶段、冒泡阶段。如上图。原创 2024-03-06 16:07:38 · 822 阅读 · 0 评论 -
事件对象与环境对象
事件对象里有事件触发时的相关信息,包括属性和方法。注册时间中,回调函数的第一个参数就是事件对象,一般命名为event、ev、e。其中e.target是主要对象,target是事件源对象,即当前触发元素。原创 2024-03-06 15:27:07 · 1117 阅读 · 0 评论 -
js---setTiemout、setInterval
语法:开启定时器==> setInterval(函数, 间隔时间)关闭定时器==> clearInterval(变量名)--变量名即为定时器的id返回值。原创 2024-03-06 14:57:48 · 604 阅读 · 0 评论 -
js--DOM文档对象模型
语法:data-自定义属性通过自定义属性可以存储数据,后期也可以使用这个数据,以dataset对象方式获取。原创 2024-03-06 12:24:08 · 317 阅读 · 0 评论 -
js--对象Object
属性都是成对出现的,包括属性名和属性值。属性就是依附在对象上的变量。对象是引用数据类型,是用来存储数据的。可以用来详细的描述某个事物,采用键值对形式存储,语义明了。方法时成对出现的,包括方法名和匿名函数。方法就是依附在对象中的函数。let 对象名 = {},{}就是对象字面量。删除:delete 对象.属性。对象.属性名,如:pig.username。新增:对象.新属性 = 值。对象的数据是无序的,数组的数据是有序的。对象.方法(),如:pig.sing()修改:对象.属性 = 值。查询:对象.属性,或。原创 2024-03-06 12:08:06 · 422 阅读 · 0 评论 -
js--函数简介
利用关键字function定义函数,函数名命名和变量命名一致,采用小驼峰命名法。原创 2024-03-06 11:45:15 · 816 阅读 · 0 评论 -
js---数组
数组是一种数据类型,属于引用数据类型,是单个变量名下存储多个数据。原创 2024-03-05 17:39:44 · 508 阅读 · 0 评论 -
js流程控制语句
js流程控制语句主要分为:顺序结构、分支结构、循环结构。原创 2024-03-04 17:55:00 · 391 阅读 · 0 评论 -
js类型转换
parseFloat():可以保留小数,如果是数字开头的字符串,只保留小数。parseInt():只保留整数,如果是数字开头的字符串,只保留整数。显示转换是告诉系统应该转换成什么类型,主要转换为数字型、字符串型、布尔型。算术运算符、比较运算符等,可以把字符串转换为数字型。Number():成功返回数字型,失败则返回NaN。隐式转换是某些运算符被执行时,系统内部自动将数据类型进行转换。+作为连接符,可以将变量做字符串拼接。逻辑非可以将变量转换为布尔类型。js类型转换可分为显示转换和隐式转换。原创 2024-03-04 17:33:30 · 380 阅读 · 0 评论 -
JS运算符
js的运算符主要有:赋值运算符、比较运算符、算术运算符、位运算符、逻辑运算符、字符串运算符、条件(三元)运算符、逗号运算符、一元运算符、关系运算符。原创 2024-03-04 17:10:12 · 954 阅读 · 0 评论 -
JS数据类型
js的数据类型分为基本数据类型(简单数据类型)和引用数据类型(复杂数据类型)。2、字符串类型 String (单引、双引、反引都属于字符串)反引是用来拼接模板字符串的,用${}包裹变量。基本数据类型的主要特点是赋值方式是传值,并且值存在栈中。引用数据类型的主要特点是赋值方式是传址,并且值存在堆中。对象 object (除了基本数据类型其他都是对象)4、未定义类型 Undefined 只声明,未赋值。5、空类型 Null 赋值内容为空。1、数字类型 Number。6、符号 symbol。原创 2024-03-04 16:22:44 · 342 阅读 · 0 评论 -
JavaScript简介、变量及常量
JS是一种运行在客户端(浏览器)的编程语言,可以用来创建动态更新的内容,控制多媒体等,制作图像、动画等交互效果。直接写在html文件里,用script标签包住,script要写在body上面。代码写在以.js结尾的文件中,通过script标签,引入到html文件中。JS变量是计算机中用来存储数据的容器,用来记录计算机中数据的不同状态。let声明是为了解决var声明的问题,如变量提升、没有块级作用域等。代码写在标签内部,直接在标签内部写js代码。只能用下划线、字母、数字、$组成,且不能以数字开头;原创 2024-03-04 16:14:27 · 400 阅读 · 0 评论