js
温情key
坚持创作 收获壮硕
展开
-
Promise.all()和Promise.race()的区别和应用场景
Promise.all()传入的异步任务数组中,全部成功才返回成功的数组,返回数组顺序和传入任务顺序保持同步只要有一个任务失败,那就返回这个任务失败的结果let p1 = Promise.resolve('成功1');let p2 = Promise.resolve('成功2');let p3 = Promise.reject('失败3');let p4 = Promise.resolve('成功4');Promise.all([p1, p2, p4]).then(res => {原创 2022-03-25 18:07:38 · 988 阅读 · 0 评论 -
js forEach和map的区别
forEachlet basicArr = [1, 2, 3, 4, 5];let objArr = [{name: 'wq'}, {name: 'qwq'}, {name: 'qqq'}];let newArr1 = basicArr.forEach((item, index) => { return item += 1;});// 基本数据数组未改变原数组 console.log(basicArr); // [1, 2, 3, 4, 5]console.log(newA原创 2022-03-25 16:49:04 · 466 阅读 · 0 评论 -
判断一个对象是否属于某个类型
Object.prototype.toString.call();对于 Object 对象,直接调用 toString() 就能返回 [object Object] 。而对于其他对象,则需要通过 call / apply 来调用才能返回正确的类型信息。function getType(value) { if(typeof value !== 'object') { return typeof value; } else { return Object.原创 2022-03-24 12:07:50 · 571 阅读 · 0 评论 -
js Map和Object的区别
Map// 创建方式let map = new Map();// 新增属性map.set(1, '值1');map.set(['key2'], '值2');map.set(true, '值3');map.set({}, '值4');map.set(function fn() {}, '值5');// key可以为js的任意数据类型,而且顺序和新增的顺序相同console.log(map); // {1 => "值1", Array(1) => "值2", true =&g原创 2022-03-23 22:18:43 · 606 阅读 · 1 评论 -
isNaN和Number.isNaN的区别
isNaNisNaN(非数字判断) 首先会进行Number函数的转换,如果转换后为number类型,那么就返回false, 否则返回trueconsole.log(isNaN(123)); // falseconsole.log(isNaN('1+1')); // falseconsole.log(isNaN('12345')); // falseconsole.log(isNaN('wqwq')); // trueconsole.log(isNaN(NaN)); // true原创 2022-03-23 18:05:51 · 305 阅读 · 0 评论 -
typeof null的结果为什么是object
因为对象在底层是用二进制表示的,在js中二进制前三位都为0的话会被判定为object类型,null为空,二进制表示全为0,所以就被判定为object了原创 2022-03-23 17:46:32 · 290 阅读 · 0 评论 -
垃圾回收机制和会导致内存泄漏的方式
垃圾回收机制垃圾回收: js代码运行时,需要分配空间存储变量和值,当变量不再参与运行时,系统会收回被它占用的内存空间,这就是垃圾回收回收机制:js具有自动垃圾回收机制,会定期释放不再使用的变量和对象所占用的内存js中存在两种变量:全局变量和局部变量; 全局变量的生命周期会持续到页面关闭;而在函数中的局部变量生命周期是从函数调用开始到函数执行完毕;在这个过程中,局部变量定义时他们的值会存储在堆和栈中,当函数执行完毕,不再被使用,就会释放掉他们所占的空间。but,当局部变量被外部函数使用时,比原创 2022-03-23 17:27:34 · 192 阅读 · 0 评论 -
js对原型和原型链的理解
1. 原型每个函数都有一个prototype(显式原型)每个对象都有一个__proto__(隐式原型)对象的__proto__全等于对应构造函数的prototype// 定义构造函数class Person { constructor(name, age) { this.name = name; this.age = age; }; sayMyself() { console.log(`我是${this.name}, 今年原创 2022-03-22 20:25:12 · 334 阅读 · 0 评论 -
js判断是否为数组的方式
1. instanceofinstanceof用于判断引用数据类型,检测构造函数的prototype属性是否出现在某个实例对象的原型链上,有则返回true,否则返回false,就是判断对象属于什么类型;let value = [];let value1 = {};let value2 = 123;let value3 = '温情';function isArray(val) { if (val instanceof Array === false) { return f原创 2022-03-20 20:59:16 · 5013 阅读 · 0 评论 -
js判断数据类型,检测方式有哪些?
1. typeoftypeof常用于判断基本数据类型,因为对象、数组和Null都返回的Objectconsole.log(typeof '温情'); // stringconsole.log(typeof 111); // numberconsole.log(typeof true); // booleanconsole.log(typeof undefined); // undefinedconsole.log(typeof function () { }); // function原创 2022-03-20 18:02:28 · 364 阅读 · 0 评论 -
js 数组方法汇总
一、js创建数组的方式1、使用 Array 构造函数let arr = new Array();// 括号里可以带参数// 传入一个数字, 这个数组代表这个数组的长度let arr = new Array(3);// 传入多个数字、一个或多个非数字 代表这些是传递到数组中的初值let arr1 = new Array(3, 5, 8);console.log(arr1); // [3, 5, 8]2、使用数组字面量let arr = ['温情', 'key', 'GAI'];c原创 2021-07-06 14:58:58 · 306 阅读 · 5 评论 -
js 对象合并的方法 Object.assign()
Object.assign()es6 Object.assign()方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)Object.assign()方法的第一个参数是目标对象,后面的参数都是源对象。let obj1 = {name: '温情'}let obj2 = {age: '22'}const newObj = Object.assign({}, obj1, obj2);console.log(newObj); // {name: "温情",原创 2021-07-03 11:47:11 · 1513 阅读 · 1 评论 -
js 数组合并的方式
js 数组合并let arr1 = ['温情', '刘聪']let arr2 = ['杨和苏', '邓紫棋']let arr3 = ['周延']1. arr1.concat(arr2, ······)es5 Array.concat() 合并两个数组, 返回新数组,不会改变原数组arr = arr1.concat(arr2, arr3);console.log(arr); // ["温情", "刘聪", "杨和苏", "邓紫棋", "周延"]2. […arr1, …arr2,···原创 2021-07-02 23:44:10 · 1454 阅读 · 2 评论 -
js 防抖和节流 举例对比 代码注释 一看就会
防抖 和 节流 是 闭包的实际应用防抖高频的触发事件,规定时间内触发会被清除,只有当超过规定时间触发,然后执行最后一次事件节流高频的触发事件,限制触发次数,规定时间内只能触发一次防抖实现案例:输入框联想<input type="text">未使用防抖let ipt = document.querySelector('input');ipt.oninput = function() { console.log(this.value + ' 发送请求');}原创 2021-07-01 23:10:47 · 807 阅读 · 17 评论 -
js面试题 高频 含答案
1. 讲一下 var, let, const 的区别?var 声明的变量有变量提升的特性,而 let、const 没有var 声明的变量会挂载到 windows 对象上,所以使用 var 声明的是全局变量,而 let 和 const 声明的变量是局部变量, 块级作用域外不能访问同一作用域下 let 和 const 不能重复声明同名变量,而var可以const声明的是常量,必须赋初值,一旦声明不能再次赋值修改,如果声明的是复合类型数据,可以修改其属性2. js中的基础数据类型有哪原创 2021-06-30 22:14:29 · 15804 阅读 · 33 评论 -
js 同步任务、异步任务(宏任务、微任务)
同步任务同步任务是指在主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务。异步任务异步任务指的是,不进入主线程、而进入"任务队列"的任务,只有等主线程任务执行完毕,"任务队列"的任务才会进入主线程执行。异步任务分为 宏任务 和 微任务宏任务常见的宏任务:settimeout setInterval script(最外层的script标签)会压入到调用栈中,宏任务会等到调用栈清空之后再执行微任务常见的微任务:promise (async a原创 2021-06-15 17:34:17 · 2103 阅读 · 16 评论 -
JS 判断一个对象是否为数组的方法
判断对象是否为数组的方法1.Array.isArray()2. instanceof3. 判断原型 (__proto__) 是否为数组对象的原型对象4. Object.toString()1.Array.isArray()Array.isArray() 可以判断一个对象是否为数组 返回布尔值let obj = {};let arr = [];console.log(Array.isArray(obj)); // falseconsole.log(Array.isArray(arr));原创 2021-06-15 16:57:13 · 286 阅读 · 0 评论 -
typeof 操作符返回的类型
typeof 操作符返回的类型共有七种undefined: 表示值未定义boolean:表示值为布尔值string:表示值为字符串number:表示值为数值object:表示值为对象function:表示值为函数symbol:表示值为符号undefinedlet msg;// 定义未赋值console.log(typeof msg); // undefined// 未定义console.log(typeof msg1); // undefinedbooleanlet原创 2021-06-15 12:48:52 · 440 阅读 · 1 评论 -
js中数组排序的方法
1. sort方法sort() 方法用于对数组的元素进行排序,并返回数组。默认排序顺序是根据字符串Unicode码点语法:array.sort(fun);参数fun可选。规定排序顺序。必须是函数。比较函数应该具有两个参数 a 和 b,其返回值如下:若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。若 a 等于b,则返回 0。若 a 大于 b,则返回一个大于 0 的值。简单点就是:比较函数两个参数a和b,返回a-b 升序,返回b-a 降序注意:会修改原数原创 2021-06-15 12:43:52 · 3014 阅读 · 1 评论 -
js 数组去重的方法
1. 利用 for 嵌套 for,然后 splice 去重function cleanRepeat(arr) { for (let i = 0; i < arr.length; i++) { for (let j = i + 1; j < arr.length; j++) { if (arr[i] === arr[j]) { arr.splice(j, 1); j--;原创 2021-06-14 21:01:38 · 1845 阅读 · 1 评论 -
js 回调函数和高阶函数(几行代码彻底理解)
回调函数和高阶函数什么是回调函数什么是高阶函数几行代码理解回调 和 高阶总结什么是回调函数详细回调函数就是一个通过函数指针调用的函数。把函数的指针 (内存地址) 作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,指向的函数就是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。(以上节选自百度百科)理解js中函数也是对象,把函数所存储在的 内存地址 作为参数传递给另一个函数,当这个地址被调用时所指向的函数,原创 2021-06-07 12:20:42 · 2031 阅读 · 0 评论 -
对JS parseInt方法的理解
对parseInt函数的理解parseInt()的定义paseInt()的用法防止踩坑,几组迷惑例子parseInt()的定义 parseInt() 函数可解析一个字符串,并返回一个整数。paseInt()的语法 parseInt(string, radix)参数描述string必选,想要解析(转换)的字符串 ,如果不是字符串,会先解析为字符串再进行转换radix可选,转换数字的基数(2~36 ),也就是你想按照什么进制进行转换 ,没有的话默认为10进原创 2021-03-15 11:41:59 · 404 阅读 · 0 评论 -
js 改变 this 指向:call aplly bind 区别以及应用场景
改变函数内部this的指向 js提供了三种方法 call(), apply(), bind()1. call(‘this想指向的对象’, ‘形参1’, ‘形参2’, ·····)call 可以调用函数可以改变this的指向不传参数,或者传 null, undefined, 函数中的 this 指向 window 对象const obj = { name: 'wenqing'};function fn(x, y) { console.log(this); co原创 2021-06-05 16:36:36 · 1005 阅读 · 0 评论 -
关于 js 里面 this 的指向问题(6种场景)
可以分为6种情况来描述this指向1. 普通函数直接调用中的thisfunction fun() { console.log(this); // window function fn() { console.log(this); // window } fn();}fun();如上代码函数里面直接调用会指向 window,需要注意的是在严格模式下this会指向 undefined2. 在对象里调用的thislet obj = { name:原创 2021-06-05 11:49:19 · 869 阅读 · 0 评论 -
js的var, let, const 的区别
JS中作用域有:全局作用域、函数作用域。没有块作用域的概念。ES6中新增了块级作用域。块作用域由 { } 包裹,if语句和for语句里面的{ }也属于块作用域。var 声明的变量有变量提升的特性,而 let、const 没有console.log(a) // undefiendvar a = 10;// 相当于var a;console.log(a); // undefienda = 10;console.log(b) // 报错 未定义let b = 10;console原创 2021-06-04 22:21:25 · 159 阅读 · 0 评论