js
TuMinQiang
这个作者很懒,什么都没留下…
展开
-
js如何判断两个数组是否相等
今天在实现一个需求的时候,需要去判断两个数组是否相等,看似简单的问题,实则还挺复杂。首先我们知道数组是引用数据类型,在==或者===比较时,比较的是其地址值,所以[1,2] == [1,2] [1,2] === [1,2] 二者输出的都是false,那么如何比较两个数组是否相等呢1. toString()或者join():它们的原理都是将二者转换成字符串,针对某一些数组可以进行判断,如:[1,2,3].toString() === [1,2,3].toString() 和 [1...原创 2021-02-25 16:56:56 · 8944 阅读 · 4 评论 -
js作用域和作用域链
js作用域和作用域链的理解 作用域: js作用域分为全局作用域、函数作用域和ES6新增的块级作用域。 作用域是一个独立的空间,让变量不会暴露出去,不同作用域下的同名变量不会起冲突。 函数作用域内定义的变量只能在函数中调用,外界无法访问到,但是因为ES之前没有块级作用域,所以会导致if和for这样的逻辑语句中的变量会被外界访问到。 ES6中新增let和const命令来创建块级作用域,所声明的变量在指点块的作用域外无法..原创 2020-11-25 09:36:18 · 225 阅读 · 0 评论 -
js数据类型
JS中的数据类型基本数据类型numberstringbooleannullundefinedsymbolbigint引用数据类型object普通对象数组对象正则对象日期对象Math数学函数对象…function数据类型检测typeof 检测数据类型的逻辑运算符(typeof返回的结果永远是一个字符串(字符串中包含了对应的类型))typeof检测原理:typeof基于计算机底层数据 类型的值(二进制)进行检测。typeof的缺陷:无法具原创 2020-11-24 19:24:41 · 84 阅读 · 0 评论 -
浏览器的事件循环机制
浏览器事件循环事件循环机制浏览器事件循环机制:js任务分为同步任务和异步任务,同步任务会直接进入js主线程执行,形成一个执行栈,当前一个任务执行完,后一个任务才会执行。异步任务不直接进入主线程,它会先在Event Table中注册回调函数,然后进入任务队列中,等执行栈中为空后,任务队列中的函数就会进入主线程中执行。异步任务分为宏任务(script, setTimeout, setInterval)和微任务(process.nextTick (node.js中进程相关的对象), Promise..原创 2020-11-19 17:19:31 · 523 阅读 · 1 评论 -
js继承
js继承原型链继承:将子类的原型指向父类缺陷: 1. 因为子类通过prototype对父类实例化继承了父类,所以父类上的引用类型的属性会被所有实例共享,其中一个实例改变它的值,其他实例中的值也会发生改变。 2. 在实例化子类时,是无法向父类传递参数的,实际上应该是说无法在不影响所有对象实例的情况下,给父类构造函数传递参数。functions Son() {}functionFather() {}Son.prototype = new Father();S..原创 2020-11-19 17:03:30 · 75 阅读 · 0 评论 -
new Object()中的new做了什么
New的执行: 创建一个空对象 把这个对象.--proto-- == 构造函数.prototype 将构造函数执行 把构造函数内的this指向实例对象 如果构造函数没有返回值或者返回值是一个基本数据类型,那么就返回构造函数的实例,如果返回的是引用数据类型,那么把这个引用数据类型返回。 ...原创 2020-11-17 17:19:16 · 476 阅读 · 0 评论 -
js中的undefined和null的区别和联系
undefined和null: undefined和null都是基本数据类型,且他们都只有一个值,分别为undefined和null。 undefined表示变量声明了但是没有定义,null表示的是空对象指针,null主要用于一些赋值给一些可能会返回对象的变量,作为初始化。 null == undefined为true,null === undefined为false。 Number(null) === 0,Number(undefined) === NaN,null和u原创 2020-11-17 16:52:19 · 111 阅读 · 0 评论 -
js中==和===的区别
==和===的区别和一些比较规则: == 在比较类型不同的变量时,会进行数据类型转化,将二者转换成数据类型相同的变量,再进行比较。 NaN == NaN false NaN和任何数都不相等,包括NaN本身 。 [] == [] false {} == {} false 引用数据类型比较的是地址。 undefined == null true 但是 undefined === true false (因为数据类型不一样)。 对象 == 字符串 将对象转换成字符串原创 2020-11-17 15:19:36 · 11977 阅读 · 0 评论 -
js垃圾回收机制
js具有自动垃圾回收机制,js垃圾回收机制是为了防止内存泄露,会寻找到那些没有被引用的内存块,释放掉他们的内存,js垃圾回收有两种方式:标记清除,引用计数。 标记清除:JavaScript中最常用的垃圾收集方式是标记清除,当变量进入执行环境(函数中声明变量)的时候,垃圾回收器将其标记为“进入环境”,当变量离开环境的时候(函数执行结束)将其标记为“离开环境”,在离开环境之后还有的变量则是需要被删除的变量。标记方式不定,可以是某个特殊位的反转或维护一个列表等。 垃圾收集器给内存中的所有变量都加上标记,原创 2020-11-17 14:07:38 · 88 阅读 · 0 评论 -
箭头函数和普通函数的区别
箭头函数和普通函数的区别 箭头函数没有自己独立的作用域,箭头函数没有自己的this,所有箭头函数中的this指向和它外层函数中的this指向一致。 使用call和apply等方法也无法改变箭头函数内的this指向。 箭头函数不能当做构造函数来使用,也就是说不能使用new命令。(因为箭头函数内没有this和prototype) 不可以使用arguments对象,该对象在函数体内是不存在的,可以使用ES6中的展开运算符(...args)。 箭头函数不可以使用yiel原创 2020-11-17 11:19:13 · 82 阅读 · 0 评论 -
var,let,const的区别
var,let,const的区别: var可以重复定义,let和const不能重复定义。 var存在变量提升,let和const不存在变量提升,如果要使用,需要提前定义 用var定义的变量会被挂载到window上,let和const定义的不会。 let和const出现的代码块会变成块级作用域,并出现暂时性死区。 ...原创 2020-11-17 11:11:31 · 99 阅读 · 0 评论 -
js变量提升
js变量提升//函数提升优先级比变量提升要高,且不会被变量声明覆盖,但是会被变量赋值覆盖,也会被后声明的函数覆盖。function a() {}var a;console.log(typeof a); //functionfoo(); // 3 后面定义的函数覆盖了前面定义的函数function foo() { console.log( 1 ); }var foo = function() { console.log( 2 ); };function foo() {原创 2020-11-16 16:09:51 · 62 阅读 · 0 评论 -
js字符串方法
/** * charAt:根据索引获取指定位置的字符 * charCodeAt:根据索引获取指定位置的字符编码( Unicode 编码) * @params * n[number]获取字符指定的索引 * @return * 返回查找到的字符(字符编码) * 找不到返回的是空字符串不是undefined * charCodeAt找不到返回NaN * 原字符串不发生变化 */{ let str = 'anklndganknakknak' l原创 2020-11-16 15:50:36 · 78 阅读 · 0 评论 -
js数组方法
一些常见的数组方法// 1.添加元素// push// 将一个或者多个元素添加至数组末尾处,并返回数组长度。{ let arr = [1, 2, 3, 4] let length = arr.push(5, 6) console.log(length, arr) // => 6 [1,2,3,4,5,6]}// unshift// 将一个或多个元素添加到数组到开头,并返回数组长度{ let arr = [1, 2, 3, 4] let length = arr.原创 2020-11-16 15:47:42 · 96 阅读 · 0 评论 -
js数组扁平化
几种常见的数组扁平化方法方案一let arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];// 基于ES6中的Array.prototype.flat()方法// 参数:指定要提取嵌套数组的结构深度,默认值为 1。//使用 Infinity,可展开任意深度的嵌套数组console.log(arr.flat(Infinity));方案二// 将数组变成字符串,可直接实现数原创 2020-11-16 15:41:00 · 95 阅读 · 0 评论 -
js数组去重
几种常见的数组去重的方法:方案一// 循环原有数组中的每一项,每拿到一项都往新数组中添加;添加之前验证新数组中是否存在这一项,不存在再增加;let ary = [1, 2, 3, 1, 2, 1, 2, 3, 2, 1, 2, 3];let newAry = [];for (let i = 0; i < ary.length; i++) { if (newAry.includes(ary[i])) { // 跳过本次循环,执行下一轮循环(跳过的这轮循环是不是执行if语句后的语句的原创 2020-11-16 15:37:42 · 58 阅读 · 0 评论