javaScript八股问题

基本 数据类型 和引用数据类型

7种(栈):string number boolean null undefined sysbol bigInt

引用数据类型(堆 存储的是内存地址):object array function

bigint和symbol的使用场景

判断数据类型的方法和优缺点

隐式类型转换,+,-的规则

==和===的区别和规则

浮点数精度

let var const的区别

1.作用域:var是全局作用域 let const是块级作用域 2.变量提升:var 声明会被提升到作用域顶部,但是赋值不会。即在声明前使用变量(值为undefined)

let const 声明也会被提升,但存在暂时性死区,就会报错

3.可变性: var let 声明的变量可以重新赋值。const 不可

4.重复声明:var允许在同一作用域内重复声明同一变量,后声明的会覆盖前一个。

let const 不允许

this指向的判断

1.全局作用域中this指向window对象,严格模式指向undefined

  1. 对象方法调用时,指向当前调用该方法的对象(谁调用,指向谁)

3.构造函数调用(new 关键字),指向新创建的实例

4.DOM事件处理函数,指向触发事件的DOM元素

5.箭头函数无this,继承外层作用域的this

6.显示改变this指向:call apply bind可以手动强制改变函数this指向

箭头函数

1.继承外层作用域的this

2.内部没有arguments(类数组对象),可用剩余参数...args来获取所有参数

3.不能作为构造函数:因为无法通过new关键字调用,会报错(因为没有prototype,也没有自己的this)

4.没有super:箭头函数不能作为类的方法(因为 super 依赖动态 this)。super是一个关键字,可访问父类的属性和方法

原型和原型链的作用

1.原型:每一个函数都有prototype属性称之原型,也称为原型对象

作用:1.原型可以存放一些属性和方法,共享给实例对象使用2.原型可以做继承

2.原型链:每个对象都有__proto__属性,这个属性指向它的原型对象,原型对象也是对象,也有__proto__属性,指向原型对象的原型对象,就这样一层一层形成的链式结构称为原型链,最顶层找不到则返回null.

promise的使用场景和相关 API

使用场景:1.网络请求 feachAPI/Axios,用于处理请求的成功/失败逻辑2.多步异步依赖,可避免回调地狱3.并行异步任务,promise.all()提高效率4.异步操作超时控制Promise.race()实现超时逻辑

相关API:1.实例方法(promise实例调用)  .then()处理成功/失败状态 .catch()处理错误 finally()

2.静态方法(promise构造函数调用) Promise.resolve()快速创建一个处于fulfilled状态的promise Promise.rejected()快速创建一个处于rejected状态的Promise Promise.all()接收Promise数组

Promise.race()接收promise数组,返回第一个完成的Promise的结果

事件循环机制 浏览器和node

事件循环(Event Loop)是 JavaScript 实现异步编程的核心机制,负责协调执行代码、处理事件和执行异步操作。

浏览器中:同步代码(执行栈)-->微任务(eg:promise 在任务队列中)-->宏任务(eg:script settimeout在任务队列中)

Node.js 的事件循环由 libuv 库实现,比浏览器更复杂,包含多个阶段,每个阶段处理特定类型的任务。六个阶段:...

垃圾回收

闭包和 作用域

闭包=内层函数+引用的外层函数变量 可实现数据的私有

闭包允许一个函数访问并操作其声明时所在作用域中的变量,即使该函数在其声明的作用域之外执行。

闭包不一定有return 也不一定会有内存泄漏

什么时候用return:外部如果想要使用闭包的变量时需要return 闭包-内存泄漏:借助垃圾回收机制的标记清除法 不是所有的内存泄漏都要手动回收的

raf和ric

事件委托,事件冒泡

事件冒泡:事件触发后在 DOM 树中向上传播的过程

事件委托:利用事件冒泡的特性,将子元素的事件处理逻辑委托给父元素或更外层元素

浅拷贝 深拷贝 ,口述如何实现深拷贝

浅拷贝:拷贝的是对象的指针,修改内容互相影响

深拷贝:整个对象拷贝到另一个内存中,修改内容互不影响

实现深拷贝:法一 JSON.parse(JSON.stringify());简单,但存在很大的缺陷 法二:递归(为避免循环引用,用 WeakMap 存储已拷贝对象) 法三 使用第三方库 Lodash 的 _.cloneDeep()

防抖和节流

防抖(debounce):在事件被触发n秒后再执行回调,如果在这n秒内又被重新触发,则重新计时

节流(throttle):规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。

  • 函数防抖和函数节流都是防止某一时间频繁触发,但是这两兄弟之间的原理却不一样。

  • 函数防抖是某一段时间内只执行一次,而函数节流是间隔时间执行。

数组的相关 api

JS的设计模式

相关推荐
Mr.Jessy7 小时前
Web APIs学习第一天:获取 DOM 对象
开发语言·前端·javascript·学习·html
想不明白的过度思考者7 小时前
Rust——异步递归深度指南:从问题到解决方案
开发语言·后端·rust
西西学代码8 小时前
Flutter---个人信息(5)---持久化存储
java·javascript·flutter
芝麻开门-新起点8 小时前
flutter 生命周期管理:从 Widget 到 State 的完整解析
开发语言·javascript·ecmascript
ConardLi8 小时前
Easy Dataset 已经突破 11.5K Star,这次又带来多项功能更新!
前端·javascript·后端
冴羽9 小时前
10 个被严重低估的 JS 特性,直接少写 500 行代码
前端·javascript·性能优化
我先去打把游戏先9 小时前
ESP32开发指南(基于IDF):连接AWS,乐鑫官方esp-aws-iot-master例程实验、跑通
开发语言·笔记·单片机·物联网·学习·云计算·aws
一 乐9 小时前
高校后勤报修系统|物业管理|基于SprinBoot+vue的高校后勤报修系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·毕设
逻极9 小时前
Rust数据类型(上):标量类型全解析
开发语言·后端·rust