摘要: Promise.all 是一个静态方法,用于处理多个 Promise 对象。它会接收一个 Promise 对象数组作为参数,返回一个新的 Promise 对象,该 Promise 对象在所有 Promise 对象已完成时才会完成,并携带着所有 Promise 对象完成的结果(按照 Promise 对 阅读全文
posted @ 2023-07-23 17:15 kitebear 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 在 JavaScript 中,当一个函数被调用时,会创建一个执行上下文(execution context),该上下文中包含函数的作用域(scope),并将其推入执行上下文栈(Execution Context Stack)中进行管理。当函数执行完毕时,其对应的执行上下文会被弹出执行上下文栈,该函数 阅读全文
posted @ 2023-07-21 08:12 kitebear 阅读(13) 评论(0) 推荐(0) 编辑
摘要: ## 什么是`Symbol`😶‍🌫️ `Symbol`作为原始数据类型的一种,表示独一无二的值,在之前,对象的键以字符串的形式存在,所以极易引发键名冲突问题,而`Symbol`的出现正是解决了这个痛点,它的使用方式也很简单。 ## `Symbol`的使用 创建一个`Symbol`与创建`Obje 阅读全文
posted @ 2023-07-21 08:12 kitebear 阅读(29) 评论(0) 推荐(0) 编辑
摘要: for...in和for...of可以用于循环遍历JavaScript对象和数组等可迭代对象。 for...in是用于遍历对象的属性,循环变量是对象的属性名(字符串类型)。它遍历对象自身所有可枚举的属性,包括从原型链中继承的属性,但是遍历的顺序是不确定的。例如: ```javascript 复制le 阅读全文
posted @ 2023-06-26 09:46 kitebear 阅读(20) 评论(0) 推荐(0) 编辑
摘要: ```JS const combineAsyncError = tasks => { const doGlide = {} const handler = res => { doGlide.out = res // 预先定义好生成器 doGlide.node = (function*(){ cons 阅读全文
posted @ 2023-06-26 09:46 kitebear 阅读(3) 评论(0) 推荐(0) 编辑
摘要: html2canvas 是一种将 HTML 元素转换为 canvas 元素的 JavaScript 库,它的原理是通过遍历 HTML 元素,将元素的内容绘制到 offscreen 的 canvas 上,最终通过 canvas 的 toDataURL 方法将其转换成图片格式。 具体的实现流程如下: 1 阅读全文
posted @ 2023-06-25 09:48 kitebear 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 为什么js引擎是单线程? js的主要用途是与用户互动,以及操作DOM,这决定它只能是单线程。例:一个线程要添加DOM节点,一个线程要删减DOM节点,容易造成分歧。 为了更好使用多CPU,H5提供了web Worker 标准,允许js创建多线程,但是子线程受到主线程控制,而且不得操作DOM。 说说进程 阅读全文
posted @ 2023-06-25 09:47 kitebear 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 在 JavaScript 中,最大安全整数是2^53-1,即9007199254740991。这是因为在 JavaScript 中,整数和浮点数的存储方式是一样的,都是采用 IEEE 754 双精度浮点数表示,但整数必须存储在 53 位之内。 超出最大安全整数范围的数字将无法被准确表示,可能会发生误 阅读全文
posted @ 2023-06-19 09:34 kitebear 阅读(118) 评论(0) 推荐(0) 编辑
摘要: call和apply都是function原型上的方法,每一个函数作为function的实例都可以调用这两个方法, 这两个方法的目的都是改变函数的this指向并且让函数执行的。 唯一的区别就是**call时需要一个个传参数,而apply时将参数以数组的形式进行传递**。 阅读全文
posted @ 2023-06-19 09:34 kitebear 阅读(22) 评论(0) 推荐(0) 编辑
摘要: 进程(Process)和线程(Thread)都是操作系统中用于多任务处理的概念。简单地说,一个进程就是一个程序的执行空间,而一个线程则是在执行空间内独立运行的执行路径。 区别: 1. 进程是系统分配资源的最小单位,线程是操作系统调度的最小单位。 2. 各个进程之间是独立的,各个线程之间共享一些资源。 阅读全文
posted @ 2023-06-16 14:39 kitebear 阅读(64) 评论(0) 推荐(0) 编辑
摘要: 当谈到继承时,JavaScript 只有一种结构:对象。每个实例对象(object)都有一个私有属性(称之为 __proto__)指向它的构造函数的原型对象(**prototype**)。该原型对象也有一个自己的原型对象(__proto__),层层向上直到一个对象的原型对象为 `null`。根据定义 阅读全文
posted @ 2023-06-16 14:39 kitebear 阅读(2) 评论(0) 推荐(0) 编辑
摘要: JSBridge 是 JavaScript 和 Native 相互通信的一种方案。它的实现流程一般如下: 1. 在 Native 端开启一个 Webview,并让其加载一个 HTML 页面。 2. HTML 页面中通过 JavaScript 调用 Native 端提供的接口,例如获取设备信息、选择图 阅读全文
posted @ 2023-06-12 13:37 kitebear 阅读(148) 评论(0) 推荐(0) 编辑
摘要: `addEventListener` 是给一个 DOM 元素添加事件监听器的方法,可以在元素上绑定响应函数以便在特定事件发生时被调用。 `addEventListener` 的最后一个参数是一个布尔值,用来指定事件监听器应该以哪种方式处理。具体来说,这个参数有两种取值: 1. `true`,表示在捕 阅读全文
posted @ 2023-06-12 13:36 kitebear 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 在 JavaScript 中,`null` 和 `undefined` 都表示空值,但它们有着不同的含义和用途。 `undefined` 表示不存在、未定义或者缺失。它是一个原始数据类型,在以下情况下会出现: - 变量被声明但没有赋值 - 访问对象属性不存在或未定义 - 函数参数未传递 而 `nul 阅读全文
posted @ 2023-06-12 13:36 kitebear 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 判断循环引用的方式主要有两种: 1. 可以使用 JSON.stringify() 方法将对象转为字符串,在转化过程中,JSON.stringify() 方法会检测对象中是否存在循环引用。如果存在循环引用,则转化会出现异常,捕获到异常后即可判断出对象中存在循环引用。 ```javascript let 阅读全文
posted @ 2023-06-05 06:26 kitebear 阅读(268) 评论(0) 推荐(0) 编辑
摘要: JavaScript 有很多种方法可以向数组中插入数据,以下列举了几种常用的方法: 1. push():向数组末尾添加一个或多个元素。 ```javascript 复制let arr = [1, 2]; arr.push(3); console.log(arr); // [1, 2, 3] ``` 阅读全文
posted @ 2023-06-05 06:26 kitebear 阅读(2262) 评论(0) 推荐(0) 编辑
摘要: Blob 是一种 JavaScript 数据类型,表示了不可变的二进制数据(即二进制大对象)。Blob 可以存储各种类型的数据,例如文本、图像、音频等等。 Blob 对象包含三个属性:size、type 和 slice()。size 属性表示 Blob 对象的数据大小(单位是字节),type 属性表 阅读全文
posted @ 2023-06-03 19:43 kitebear 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 数组去重是前端开发中比较常见的问题,有多种方法可以实现: 1. 使用 Set 去重(ES6) ``` const arr = [1, 1, 2, 3, 4, 4, 5]; const uniqueArr = [...new Set(arr)]; console.log(uniqueArr); // 阅读全文
posted @ 2023-06-03 19:42 kitebear 阅读(2) 评论(0) 推荐(0) 编辑
摘要: requestAnimationFrame 是一个用于优化浏览器动画效果的 API。它可以让浏览器在下一次重绘前执行指定的回调函数,从而可以更加流畅地执行动画效果,避免了使用 setTimeout 或 setInterval 可能引起的性能问题。 requestAnimationFrame 的用法非 阅读全文
posted @ 2023-06-01 22:23 kitebear 阅读(144) 评论(0) 推荐(0) 编辑
摘要: `__proto__` 和 `prototype` 是不同的概念,它们不应该被混淆或等同使用。 `prototype` 是函数对象(Function)特有的一个属性,函数对象通过它来实现对象的继承。函数对象的 `prototype` 属性指向一个原型对象,该原型对象在创建实例对象时会被作为实例对象的 阅读全文
posted @ 2023-06-01 22:23 kitebear 阅读(27) 评论(0) 推荐(0) 编辑
摘要: JavaScript 有七种基本数据类型,分别如下: 1. 数字(Number)类型:整数和浮点数的统称,用于表示数值。 2. 字符串(String)类型:由零个或多个字符组成的序列,用于表示文本。 3. 布尔(Boolean)类型:只有 true 和 false 两个取值,用于表示逻辑上的真假。 阅读全文
posted @ 2023-05-31 07:29 kitebear 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 深拷贝是指复制一个对象时,不仅复制对象本身的属性,而且递归复制对象属性的值。通俗的说,深拷贝将一个对象完全复制一份,并且新对象的修改不会影响原对象。 实现深拷贝的方法有很多,以下是两种常见的方式: 1. 递归实现深拷贝 通过递归遍历需要拷贝的对象,当遇到子对象时进行深度遍历,将子对象也进行深拷贝。可 阅读全文
posted @ 2023-05-31 07:28 kitebear 阅读(14) 评论(0) 推荐(0) 编辑
摘要: js宏任务是什么?当前调用栈中执行的代码成为宏任务。js微任务是什么?当前宏任务执行完,在下一个宏任务开始之前需要执行的任务,可以理解为回调事件。宏任务中的事件放在callback queue中,由[事件触发](https://so.csdn.net/so/search?q=%E4%BA%8B%E4 阅读全文
posted @ 2023-05-30 15:17 kitebear 阅读(29) 评论(0) 推荐(0) 编辑
摘要: 在 JavaScript 中,0.1 和 0.2 都是小数,它们实际的二进制表示时可能是无限循环或者近似值的。而当两个近似值的小数进行数值计算时,由于数值的精度只有 53 位,会产生舍入误差,从而导致计算结果不准确。 例如,在 JavaScript 中执行 `0.1 + 0.2` 的运算,可能得到的 阅读全文
posted @ 2023-05-30 15:16 kitebear 阅读(74) 评论(0) 推荐(0) 编辑
摘要: Vite 不是基于 Webpack 的工具,而是一个基于 Rollup 的工具,用于快速构建现代化的 Web 应用程序。 Vite 采用了类似 Vue.js 的单文件组件(SFC)的开发模式,支持 Vue 3、React、Preact、Svelte 和 LitElement 等前端框架。同时,它通过 阅读全文
posted @ 2023-05-29 11:40 kitebear 阅读(74) 评论(0) 推荐(0) 编辑