前端面试题-八股文
目录
0.1+0.2 !== 0.3 浮点数精度的问题,0.1与0.2 在内存中值是约等于的 0.30000000000000004
js怎么判断l两个小数是否相等 判断a-b的绝对值 <0.00001 他们就几乎相等
typeof null -->object
typeof NaN -->number NaN:表示一个不能表示的数字
JSON的理解
是一种轻量级的数据交换格式,可以作为数据格式来传递
用途:数据交换,可以表示对象,数组,boolean,string,number
JSON.stringify() 把符合JSON 格式的数据结构转为JSON字符串
JSON.parse() 把JSON格式的字符串转为js数据结构(数组)
Unicode 是字符集 UFT-8 是字符集的编码
DOM document object model 文档对象模型
作用:把网页中的代码转为js中的对象来完成增删改查操作
BOM browser object model 浏览器对象模型
作用:主要用于管理窗口与窗口之间的通讯
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style> #main { width: 400px; height: 400px; border: 1px solid black; /* position: relative; */ /* display: flex; justify-content: center; align-items: center; */ display: table-cell; vertical-align: middle; text-align: center; } #content { width: 100px; height: 100px; border: 1px solid black; /* position: absolute; */ /* top: 50%; left: 50%; */ /* 指的是子盒子 宽高的一半 */ /* transform: translate(-50%, -50%); */ /* h */ /* margin-top: -50px; */ /* w */ /* margin-left: -50px; */ /* margin: auto; */ } </style> </head> <body> <!-- 1、定位法 1)父相子绝,子盒子top:50%;left:50%;transform:translate(-50%,-50%); 2)父盒子设置display: table-cell; vertical-align: middle; text-align: center; 2、弹性盒布局: 1)父盒子设置display:flex; 子盒子设置margin:auto; (父盒子中只有一个盒子时采用) 2)父盒子设置 display:flex; justify-content: center; align-items: center; --> <div id="main"> <!-- <div id="content"></div> --> <img id="content" src="002.jpg" alt="" /> </div> </body> </html>
var 是ES5的 属于函数作用域或者块级作用域 具有变量提升 可以重复声明 重复赋值
let 是ES6的 属于块级作用域 不具有变量提升 不能重复声明
const 是ES6的 属于块级作用域 x x x
深浅拷贝主要针对的对象是引用类型。
内存:分为4个区域,栈区、堆区、全局静态区、只读区。全局变量存储在全局数据区中,局部变量存储在栈中。
栈堆区别:基本数据类型的数据存储在栈;引用数据类型的数据存储在堆,然后在栈中存储在堆中对应的地址。基本数据类型数据值类型,引用数据类型属于地址类型。
基本数据类型赋值算什么拷贝?不存在拷贝,赋值的是值。
引用数据类型 数组的赋值是浅拷贝,拷贝的是内存地址,并不是数据
解构赋值 一维数组和对象是深拷贝,多维是浅拷贝
浅拷贝:两个对象同时引用了一个地址,一个改变都变
var people = { id: "007", name: "刘德华", books: ["三国演义", "水浒传", "红楼梦"], }; console.log(people); var people2 = {}; for (let key in people) { people2[key] = people[key]; } people2.books.push("西游记"); console.log(people, people2);
深拷贝:开辟了新的内存地址,存放值 两个对象互不影响
var obj = { name: "rql", age: 24, toy: { name: "phone", }, }; function deepCopy(newObj, obj) { var newObj = newObj || {}; for (var key in obj) { if (typeof obj[key] === "object") { newObj[key] = obj[key].constructor === Array ? [] : {}; deepCopy(newObj[key], obj[key]); } else { newObj[key] = obj[key]; } } return newObj; } var obj1 = deepCopy({}, obj); console.log(obj1);
function deepClone(source) { const targetObj = source.constructor === Array ? [] : {}; for (let keys in source) { if (source.hasOwnProperty(keys)) { if (source[keys] && typeof source[keys] === "object") { targetObj[keys] = source[keys].constructor === Array ? [] : {}; targetObj[keys] = deepClone(source[keys]); } else { targetObj[keys] = source[keys]; } } } return targetObj; } let objC = { title: "深拷贝", age: 12, arr: [1, 2, 3, 4], obj: { name: "武神", }, }; // 赋值是浅拷贝 let newObjC = objC; // let newObjC = deepClone(objC); newObjC.arr.push(999); newObjC.obj.name = "无神"; console.log(objC, newObjC);
解决回调地狱
异步的,三种状态(pending待定的,fulfilled已实现,rejected没有实现),三种状态不可逆转
resolve成功时调用,reject失败时调用。
基本结构
then方法
支持异步
链式调用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)