首页 / 资讯中心 / 文章详情

前端八股(自用)

前端八股(自用) ★ FEATURED ARTICLE
1.js的数据类型原始类型值类型 7 种栈存储String、Number、Boolean、Bigint、Undefined、Null、Symbol引用类型堆存储Object Array、Function、Date、RegExp等引用值特点变量只存堆内存地址多个变量共用同一个堆数据时改一个全变2.判断数据类型的方式1. typeof适合判断原始类型判断对象只能分出object / function数组、null 都识别不出来null、数组都会判断为objectegtypeof 123456 string typeof null object typeof {a:1} object typeof [1,2,3,4] object判断数组优先使用 Array.isArray()2. instanceof判断引用类型是谁的实例不能直接判断原始值返回布尔值true / false注意基本类型直接用 instanceof 是 falseconst arr [] console.log(arr instanceof Array) // true const obj {} console.log(obj instanceof Object) // true function Person() {} const p new Person() console.log(p instanceof Person) // true3. Object.prototype.toString.call()精准判断所有类型面试题问堆和栈的区别答问null 是放堆还是栈答null是基本类型值存在栈 typeof null ‘object 是历史bug不是说它是对象3.浅拷贝和深拷贝1.浅拷贝只复制栈里的地址共用堆里对象常见方法1.展开运算符 ...常用const obj{a:1,b:{c:2}} const newObj{...obj}2.Object.assign()const newObjObject.assign({},obj)注意只能复制自身可枚举属性不拷贝原型、symbol 以外的不可枚举属性3.数组浅拷贝const arr[1,2,3] const arr1[...arr] const arr2arr.slice() const arr3Array.from(arr) const arr4arr.concat()2.深拷贝在堆中开辟一块内存生成全新对象常用方法1.Json.parse(Jsom.stringify()) 最简单有坑const newObj JSON.parse(JSON.stringify(obj))不能拷贝undefined、function、symbol→ 直接丢掉不能拷贝循环引用会报错不能拷贝Date→ 变成字符串RegExp、Error对象拷贝异常无法拷贝原型链上的属性2.手写递归深拷贝function deepClone(obj,hushnew WeakMap()){ if(objnull || typeof obj ! object) return obj if(hush.has(obj)) return hush.get(obj) let cloneArray.isArray(obj) ? [] : {} for(let k in obj){ if(obj.hasOwnProperty(k){ clone[k] deepClone(obj[k],hush) } } return clone }3.第三方库lodash 的 _.cloneDeep() 生产最稳内置处理各种特殊对象、循环引用import _ from lodash const newObj _.cloneDeep(obj)4. structuredCloneconst obj { a: 1, date: new Date(), map: new Map([[x, 2]]), set: new Set([3,4]) } // 循环引用也可以JSON直接报错 obj.self obj const clone structuredClone(obj) clone.a 999 console.log(obj.a) // 1互不影响 ✔structuredClone是现在浏览器原生最好用的深拷贝解决了 JSON 深拷贝绝大多数痛点但是对象里面一旦有函数就不能用它会直接报错。4.数组的常用方法 分成3类记迭代方法forEach、map、filter、reduce...修改原数组push、pop、splice ...返回新数组slice 、concat、map 、filter...
阅读完成 · 觉得有帮助?
咨询建站