- JavaScript中的数据类型有以下几种:基本数据类型包括数字(Number)、字符串(String)、布尔值(Boolean)、空值(Null)和未定义值(Undefined),还有引用数据类型包括对象(Object)和数组(Array)。
存储上的差别:
- 基本数据类型在内存中占据固定大小的空间,直接存储在栈内存中。
- 引用数据类型是按引用访问的,实际的对象或数组是存储在堆内存中,而变量只是保存了对该对象或数组的引用地址。
- JavaScript中常见的数据结构包括:
- 数组(Array):一组按顺序排列的值
- 对象(Object):键值对集合
- 栈(Stack):后进先出(LIFO)的数据结构
- 队列(Queue):先进先出(FIFO)的数据结构
- 链表(Linked List):节点通过指针相连形成链式结构
- 树(Tree):具有层级关系的节点集合
- 图(Graph):由节点和边组成,表示多对多关系
- DOM (Document Object Model) 是操作网页文档内容及结构的 API。DOM常见操作包括:
- 获取元素: getElementById, getElementsByClassName, getElementsByTagName等方法
- 修改元素属性、样式、内容等: 如innerHTML、innerText、setAttribute等方法
- 创建、删除元素: createElement, appendChild, removeChild等方法
- 事件绑定与处理: addEventListener, removeEventListener等方法
- BOM (Browser Object Model) 是浏览器对象模型,提供了一组访问和控制浏览器窗口的对象。常见的BOM对象包括:
- window对象:代表整个浏览器窗口,可以操作窗口尺寸、打开新窗口、定时器等
- document对象:代表当前文档,可以获取和修改文档内容及结构
- location对象:提供了与URL相关的信息和方法,如获取当前URL、跳转到其他页面等
- navigator对象:提供了关于浏览器的信息,如用户代理字符串、浏览器版本等
”==“是相等运算符,会进行类型转换后再比较两个值是否相等;”===“是严格相等运算符,不会进行类型转换,要求类型和值都相同才会返回true。通常情况下优先使用”===“来进行比较。
typeof用于检查一个变量或表达式的数据类型;instanceof用于判断一个对象是否是某个构造函数创建的实例。主要区别在于typeof适用于基本数据类型和函数(返回字符串),而instanceof适用于判断对象的具体类型(返回布尔值)。
JavaScript中的原型是指每个对象在创建时关联到另一个对象上,并继承它们的属性和方法。原型链是一种查找属性和方法的机制,如果在当前对象上找不到某个属性或方法,会继续往原型链上查找。
作用域链是指变量和函数的作用域嵌套关系所形成的链条。当访问一个变量时,JavaScript引擎会沿着作用域链逐级向上查找,直到找到该变量或到达全局作用域。作用域链决定了变量的可访问范围。
this是在函数执行时自动创建的一个特殊对象,代表当前调用该函数的对象。具体指向哪个对象取决于函数调用方式:普通函数中this指向全局对象(浏览器环境下为window),而在构造函数中this指向新创建的实例对象。
new操作符主要做以下几件事情:创建一个空对象;将空对象的proto属性设置为构造函数的prototype属性;将构造函数中的this指向空对象,并执行构造函数代码;返回这个新对象。
bind、call、apply都是用来改变函数内部的this指向。
- bind返回一个新函数,并永久绑定了传入bind()方法的第一个参数作为新函数内部的this值。
- call和apply立即执行被调用的函数。
- call以参数列表形式传入参数,apply以数组形式传入参数。
执行上下文是JavaScript在执行代码时的环境,包含了变量、函数声明、作用域链等信息。执行栈是用来管理执行上下文的数据结构,遵循先进后出的原则。
JavaScript中的事件模型基于浏览器的事件机制,通过绑定事件处理函数来响应用户操作或其他触发条件。常见的事件有点击事件、鼠标移动事件、键盘事件等。
事件代理(也称为事件委托)是指将一个元素的事件处理委托给其父元素或更上层元素进行处理。应用场景包括减少监听器数量、动态添加/删除元素时依然能够处理事件等。
闭包是指函数和对其周围状态(词法环境)的引用捆绑在一起形成的实体。闭包可以让内部函数访问外部函数的变量和参数,并保持对它们的持久引用。常见使用场景包括封装私有变量和实现柯里化等。
JavaScript中类型转换涉及隐式类型转换和显式类型转换两种方式。隐式类型转换是由JavaScript自动进行的,而显式类型转换需要通过特定方法或操作符来完成,如String()、Number()、parseInt()等。
浅拷贝只复制对象或数组的引用,而深拷贝会创建一个新的对象或数组,并递归复制所有嵌套的对象和数组。实现深拷贝可以使用递归遍历、JSON.stringify和JSON.parse等方法。
函数缓存是指将函数的输入参数与对应的输出结果进行缓存,以避免重复计算。常见应用场景包括斐波那契数列、阶乘等需要频繁计算且结果不变的场景。
JavaScript中处理字符串常用的方法有:substring, substr, slice, indexOf, lastIndexOf, charAt, toUpperCase, toLowerCase等。
数组常用方法包括:push, pop, shift, unshift, splice, concat, slice, join, reverse等。
事件循环是JavaScript中异步编程模型的基础。它控制着代码中各种任务(同步任务和异步任务)的执行顺序,保证任务按照一定规则被执行。
JavaScript本地存储方式包括:
- localStorage:可长期保存数据,并且在同源窗口间共享。
- sessionStorage:只在当前会话有效,关闭窗口后数据销毁。
- Cookie:在浏览器端保存小段数据,可以设置过期时间。
- IndexedDB:提供了一个类似数据库的环境,支持大容量、离线存储数据。
实现大文件断点续传需要使用分片上传的方式,将文件拆分为多个小块进行上传,并记录已上传的块信息。在网络中断或终止后,可以根据已上传的块信息恢复上传进度。
AJAX (Asynchronous JavaScript and XML) 是一种用于创建异步请求的技术。它通过XMLHttpRequest对象与服务器进行通信,实现页面部分刷新和数据交互等功能。具体实现包括创建XHR对象、设置请求参数、发送请求并处理响应等步骤。
内容由零声教学AI助手提供,问题来源于学员提问




