![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JS
JS总结
Bliss_妍
这个作者很懒,什么都没留下…
展开
-
怎么判断数组类型
1. Object.prototype.toString.call(obj)2. obj instanceof array3. Array.isArray(obj)原创 2020-09-06 10:46:17 · 260 阅读 · 0 评论 -
new操作符原理
new操作符实现原理: function news(func) { var target = {};//生成新对象 target.__proto__ = func.prototype;//实例的__proto__指向原型,构造函数的prototype也指向原型(链接到原型) var res = func.call(target);//绑定新对象的this到func上面 if (typeof (res) == ...原创 2020-08-28 08:46:41 · 146 阅读 · 0 评论 -
async
首先,await 只能出现在 async 函数中。1、async 的作用async 函数负责返回一个 Promise 对象如果在async函数中 return 一个直接量,async 会把这个直接量通过Promise.resolve() 封装成 Promise 对象;如果 async 函数没有返回值,它会返回 Promise.resolve(undefined)2、await 在等待什么一般我们都用await去等带一个async函数完成,不过按语法说明,await 等待的是一个表原创 2020-08-23 07:54:05 · 924 阅读 · 0 评论 -
数组扁平化
function flat(arr) { while (arr.some(item => Array.isArray(item))) { arr = [].concat(...arr); } return arr;}原创 2020-08-21 17:37:04 · 66 阅读 · 0 评论 -
原型链 && __proto__和prototype的区别
Javascript中所有的对象都是Object的实例,并继承Object.prototype的属性和方法,也就是说,Object.prototype是所有对象的爸爸。原型链查找:当访问一个对象的属性 / 方法时,它不仅仅在该对象上查找,还会查找该对象的原型,以及该对象的原型的原型,一层一层向上查找,直到找到一个名字匹配的属性 / 方法或到达原型链的末尾(null)。__proto__和constructor属性是对象所独有的;prototype属性是函数所独有的。但是由于JS中函数也是一种对象.原创 2020-08-19 11:03:44 · 74 阅读 · 0 评论 -
AMD、CMD、CommonJs、ES6的对比
他们都是用于在模块化定义中使用的,AMD、CMD、CommonJs是ES5中提供的模块化编程的方案,import/export是ES6中定义新增的1)AMD-异步模块定义AMD是RequireJS在推广过程中对模块定义的规范化产出,它是一个概念,RequireJS是对这个概念的实现RequireJS:是一个AMD框架,可以异步加载JS文件,按照模块加载方法,通过define()函数定义,第一个参数是一个数组,里面定义一些需要依赖的包,第二个参数是一个回调函数,通过变量来引用模块里面的方法,最后通过r原创 2020-08-19 11:03:01 · 129 阅读 · 0 评论 -
JS数组排序||sort方法
sort方法不传参数的话,排序默认根据字符串的Unicode排序;传递参数的情况,所传的参数必须为一个函数,该函数对a,b两个参数进行比较,返回一个结果,具体如下:a 大于 b 返回一个大于0的值,a在b位置的后面;a 等于 b 返回一个等于0的值,a、b位置不变;a 小于 b 返回一个小于0的值,a在b位置的前面;冒泡排序原理:对数组进行遍历,相邻元素根据大小进行交换,每次遍历将最小值推至最前方,然后对剩下的值再次进行比较 最坏时间复杂度:O(n^2)空间复杂度:O(1)func..原创 2020-08-19 10:57:12 · 361 阅读 · 0 评论 -
事件冒泡和事件捕获
1. 事件冒泡: 当一个元素被触发之后,会将事件一层一层由里向外一直传递到window对象。2. 事件捕获:与事件冒泡相反,由外向里3. DOM事件流:事件流包括三个阶段,事件捕获阶段、处于目标阶段和事件冒泡阶段。首先发生的事件捕获,为截获事件提供了机会。然后是实际的目标接收了事件。最后一个阶段是冒泡阶段,可以在这个阶段对事件做出响应。两种方式来阻止事件冒泡:方式一:event.stopPropagation();方式二:return false;但是这两种方式是有区别的。return fal原创 2020-08-19 10:56:30 · 1181 阅读 · 0 评论 -
typeof 和 instanceOf的区别 || JS判断数据类型的方法
typeof 是一个一元运算,放在一个运算数之前,返回值是一个字符串,该字符串说明运算数的类型。typeof 一般只能返回如下几个结果:number,boolean,string,function,object,undefined。我们可以使用 typeof 来获取一个变量是否存在;如果检测对象或null的话都会返回‘object’;instanceof 用于判断一个变量是否某个对象的实例;所有引用类型值都是object的实例,所以在检测一个引用类型值和Object构造函数时,instanceof操作原创 2020-08-19 08:14:31 · 231 阅读 · 0 评论 -
箭头函数和普通函数的区别
一.外形不同:箭头函数使用箭头定义,普通函数中没有。二.箭头函数全都是匿名函数:普通函数可以有匿名函数,也可以有具名函数。三.箭头函数不能用于构造函数:普通函数可以用于构造函数,以此创建对象实例。四.箭头函数中this的指向不同:...原创 2020-08-19 07:06:41 · 920 阅读 · 0 评论 -
==和===区别
1、对于string,number等基础类型,==和===是有区别的1)不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不等2)同类型比较,直接进行“值”比较,两者结果一样2、对于Array,Object等高级类型,==和===是没有区别的进行“指针地址”比较3、基础类型与高级类型,==和===是有区别的1)对于==,将高级转化为基础类型,进行“值”比较2)因为类型不同,===结果为false...原创 2020-08-18 22:37:52 · 3865 阅读 · 0 评论 -
ES6总结
1、es5和es6的区别 ES6新增的一些特性: 1)let声明变量和const声明常量,两个都有块级作用域 ES5中是没有块级作用域的,并且var有变量提升,在let中,使用的变量一定要进行声明 2)箭头函数 ES6中的函数定义不再使用关键字function(),而是利用了()=>来进行定义 3)模板字符串 模板字符串是增强版的字符串,用反引号(`)标识,可以当作普通字符串使用,也可以用来定义多行字符串 4)解构赋值 ES6 允许按照一定模式,从数组和对原创 2020-08-18 22:30:53 · 95 阅读 · 0 评论 -
防抖节流
1. 防抖函数概念:频繁触发,但只在规定时间内没有触发查询条件才会执行一次代码。实现原理:如果在delay时间内频繁操作,则每次都会清除一个定时器并重新创建一个,直到最后一次操作,等待delay时间后执行fn函数。应用场景:频繁操作点赞和取消点赞;输入框搜索自动补全事件;scroll滚动触发事件,判断是否到页面底部自动加载更多;表单校验;按钮提交;浏览器窗口缩放,resize事件;优点:有效减轻服务器的压力;代码实现:const debounce = (fn, delay) => {原创 2020-08-18 14:29:48 · 118 阅读 · 0 评论 -
JS单线程
JavaScript通过处理页面中用户的交互,以及操作DOM树、CSS样式树来给用户呈现一份动态而丰富的交互体验和服务器逻辑的交互处理。如果JavaScript以多线程的方式来操作这些UI DOM,则可能出现UI操作的冲突;在多线程的交互下,处于UI中的DOM节点就可能成为一个临界资源,假设存在两个线程同时操作一个DOM,而线程1要求浏览器删除DOM节点,线程2却希望修改这个节点的某些样式风格。这个时候浏览器就无法裁决采用哪一种策略了。可以为浏览器引入“排它锁”或者是“乐观锁”来解决这些冲突,但为了避免原创 2020-08-17 16:03:46 · 97 阅读 · 0 评论 -
call/apply/bind区别
相同点:1、都是用来改变函数的this对象的指向的。2、第一个参数都是this要指向的对象。3、都可以利用后续参数传参。不同点:apply的第二个参数传的是一个函数参数列表的数组形式。call的用法和apply差不多,就只有传参方式不一样。它可以把多个参数分开来传,而不是像apply一样,需要把所有参数放到一个数组里边传进来。bind的传参方式和call一样,只不过它的不同之处是,apply和call方法调用之后会立即执行,而bind方法调用之后会返回一个新的函数,它并不会立即执行,需要我们原创 2020-08-16 10:50:47 · 80 阅读 · 0 评论 -
闭包
闭包是指有权访问另一个函数作用域中变量的函数。闭包的三个特性:1. 闭包可以访问当前函数以外的变量2. 即使外部函数的变量已经返回,闭包仍能访问外部函数中的变量。3. 闭包可以更新外部变量的值使用场景:1.setTimeout:原生的setTimeout传递的第一个函数不能带参数,通过闭包可以实现传参效果。2.回调:定义行为,然后把它关联到某个用户事件上(点击或者按键)。代码通常会作为一个回调(事件触发时调用的函数)绑定到事件。3.防抖: 在事件被触发n秒后再执行回调,如果在这n秒内又被触发原创 2020-08-16 10:45:32 · 84 阅读 · 0 评论 -
this
thisthis的5种绑定方式:(1)默认绑定(非严格模式下this指向全局对象, 严格模式下this会绑定到undefined)(2)隐式绑定(当函数引用有上下文对象时, 如 obj.foo()的调用方式, foo内的this指向obj)(3)显示绑定(通过call()或者apply()方法直接指定this的绑定对象, 如foo.call(obj))(4)new绑定(5)箭头函数绑定(this的指向由外层作用域决定的)1. 默认绑定在非严格模式下this指向的是全局对象window,而原创 2020-08-06 18:33:15 · 326 阅读 · 0 评论 -
事件循环Event Loop
事件循环Event Loop执行顺序:1.一开始整个脚本作为一个宏任务执行2.执行过程中同步代码直接执行,宏任务进入宏任务队列,微任务进入微任务队列3.当前宏任务执行完出队,检查微任务列表,有则依次执行,直到全部执行完4.执行浏览器UI线程的渲染工作5.检查是否有Web Worker任务,有则执行6.执行完本轮的宏任务,回到2,依此循环,直到宏任务和微任务队列都为空微任务包括:MutationObserver、Promise.then()或catch()、Promise为基础开发的其它技术原创 2020-08-06 20:17:57 · 47 阅读 · 0 评论 -
继承
继承就是子类可以使用父类的所有功能,并且对这些功能进行扩展。八种继承方式:1.原型链继承2.构造继承3.组合继承4.寄生组合继承5.原型式继承6.寄生继承7.混入式继承8.class中的extends继承1.原型链继承将子类的原型对象指向父类的实例Child.prototype = new Parent()、优点:(1)继承了父类的模板,又继承了父类的原型对象缺点:(1)如果要给子类的原型上新增属性和方法,就必须放在Child.prototype = new Paren原创 2020-08-06 18:30:21 · 188 阅读 · 0 评论 -
Promise
PromisePromise 是一个对象,它代表了一个异步操作的最终完成或者失败。由于它的then方法和catch、finally方法会返回一个新的Promise所以可以允许我们链式调用,解决了传统的回调地狱问题。再说一下then以及catch方法:1. Promise的状态一经改变就不能再改变。2. .then和.catch都会返回一个新的Promise。3. catch不管被连接到哪里,都能捕获上层未捕捉过的错误。4. 在Promise中,返回任意一个非 promise 的值都会被包裹原创 2020-08-06 20:17:05 · 98 阅读 · 0 评论