最新小抄
如何用 JS 实现冒泡排序
冒泡排序在 JavaScript 中的实现非常简单,可以通过一次循环来完成。下面是使用 JavaScript 实现冒泡排序的示例代码: function bubbleSort(arr) { for (let i = 0; i < arr.length - 1; i++) { for (let j = 0; j < arr.length - i - 1; j++) { ifJS 正则表达式校验 URL 地址
正则表达式是一种用于检查字符串中是否存在特定格式的强大工具,可以用来验证 URL 地址。例如,你可以使用以下正则表达式来校验 URL: /^(http|https):\/\/(\S+)$/ 上面的正则表达式表示,URL 必须以 `http` 或者 `https` 开头,然后是 `://`,最后是一个非空字符串。 示例代码: // 用于校验 URL 的正则表达式 const urlRegex = /JS 正则表达式校验 IP 地址
正则表达式可以用来校验 IP 地址,以下是一段示例代码: const ipRegex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0如何用 JS 解析 URL 参数
使用 JavaScript 解析 URL 参数的方法有很多,但最常见的一种是使用 URL 模块中的 URLSearchParams API。要使用这个 API,首先需要获取 URL 对象,然后将其传递到 URLSearchParams 构造函数中: // Get the URL object const url = new URL('https://example.com?foo=bar&baz=JS 正则表达式校验电子邮箱地址
可以使用 JavaScript 的正则表达式来检验电子邮箱地址,例如: /^(([^<>()\]\\.,;:\s@"]+(\.[^<>()\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ 上述正则表达式将匹配形如 `e如何用 Java 实现快速排序算法
快速排序是一个典型的分治算法,它的基本思想是:首先在数列中取一个元素作为基准(pivot),然后将所有小于它的元素放在它的左边,大于它的元素放在它的右边,这样就将数列以基准分成了两部分,随后再分别对这两部分继续重复上述步骤,依次进行下去,直至整个数列有序。 Java 的实现示例代码如下: public class QuickSort { public static void quickSo如何用 Python 实现快速排序算法
快速排序算法是一种分治思想的算法,它将一个数组分为两部分,其中一部分的所有值都小于另一部分。它的原理是: 1. 选择一个基准值(pivot):通常会选择数组的第一个值作为基准值; 2. 将数组中的其他元素与基准值进行比较,将小于基准值的元素放到基准值的左边,大于基准值的元素放到基准值的右边; 3. 将基准值左边的子数组和右边的子数组分别用相同的方法进行排序,直至子数组的长度为 1,此时数组排序完成如何用 JS 实现快速排序算法
可以使用快速排序算法来对数组进行排序。它的基本思想是: 1. 选定一个分割元素(通常是数组的第一个元素) 2. 将分割元素与其他元素进行比较,将小于分割元素的元素放在其左边,将大于分割元素的元素放在其右边 3. 对左边和右边子数组分别重复步骤 1 和 2,直到所有子数组只包含一个元素 以下是用 JavaScript 实现快速排序算法的示例代码: function quickSort(arr) {什么是 “匈牙利命名法”
匈牙利命名法(Hungarian notation)是一种命名标识符的约定,它起源于微软公司的编程团队在 1980 年代早期的开发中使用的一种命名规则。该规则要求将变量名、函数名等标识符的前缀表示出其数据类型,这个前缀通常由一个或多个小写字母组成。这种命名法可以帮助程序员更快地了解一个变量的数据类型,提高代码的可读性和可维护性。 例如,在使用匈牙利命名法的代码中,一个整数类型的变量名可能被命名为代码中的大小写拼写格式
格式 | 通常适用场景 | 备注 `camelCase` | 普通变量,属性名 `PascalCase` | 类 | `snake_case` | 普通变量,属性名 `UPPER_CASE` | 常量 `kebab-case` | 属性名 * Camel case * dromedary case * hump case * 驼峰式 * 小驼峰式 * Pascal case * UppHTTPS 加密原理
HTTPS 连接过程是 “对称加密” 和 “非对称加密” 相结合来完成的。 * 在生成通信密钥阶段:用到的是非对称加密。 * 在传输内容阶段:用到的是对称加密。 非对称加密 * “私钥加密、公钥解密” 用来签名:服务器向 CA 申请公钥证书,CA 用其私钥加密(签名);服务器把公钥证书发给客户端,客户端通过 CA 公钥解密(验证),确认服务器公钥是否正常。 * “公钥加密、私钥解密” 用来加密:客JS 原型链的简要描述
const o = new Object() o.constructor === Object o.__proto__ === Object.prototype Object.constructor === Function Object.__proto__ === Function.prototype Object.prototype.constructor === Object FunctioJS 中 .__proto__ 与 .prototype 的关系与区别
简要说明如下: * `.__proto__` 是对象的属性;`.prototype` 是构造函数的属性。 * 两者的值都是原型对象。也就是说,两者的作用都是获取对象的原型对象。 * 对于由构造函数创建的对象来说,`o.__proto__ === o.constructor.prototype` ——这是两者最直接的关联。 * 对于 “对象字面量” 和由 `Object.create(proto)`JS 判断一个对象是否为另一个对象的原型
判断 `protoObj` 对象是否为 `obj` 对象的原型。 方法一 obj.__proto__ === protoObj // or Object.getPrototypeOf(obj) === protoObj 坑 * 直接取 `obj` 的原型,但不查询原型链。 方法二 obj instanceof protoObj // or protoObj.isPrototypeOf(obj) 此JS 判断两个值是否相同
a === b 坑 * `NaN === NaN` 返回 `false`。 方法二 Object.is(a, b) 比较两个 `NaN` 时可以返回正确的结果。 坑 * 此方法认为 `0` 和 `-0` 不相同。JS 类型判断方法简要汇总
* 除 `null` 以外的基本类型:`typeof value === '...'` > * JS 中的基本类型参见 [JS 中的基本数据类型](/memo/js-primitive-data-type.html)。 > * `typeof` 运算的返回值参见 [JS 中 typeof 运算的返回值](/memo/js-results-of-typeof.html)。 数组 * `ArrayJS 中 typeof 运算的返回值
* `'undefined'` —— 如果变量是 Undefined 类型的 * `'boolean'` —— 如果变量是 Boolean 类型的 * `'number'` —— 如果变量是 Number 类型的 * `'string'` —— 如果变量是 String 类型的 * `'symbol'` —— 如果变量是 Symbol 类型的 * `'bigint'` —— 如果变量是 BigInJS 中的基本数据类型
在 JavaScript 中,基本类型(原始值、原始类型、基本数据类型)是一种既非对象也无方法或属性的数据。 JS 有 7 种基本数据类型: * Null —— 空(对象占位符) * Undefined —— 未定义 * Boolean —— 布尔值 * Number —— 数字 * String —— 字符串 * Symbol * BigInt —— 大整数如何获取网页性能指标 Web Vitals
Web Vitals 是一组关键的用户体验指标,旨在帮助网站开发人员和设计师更好地评估和改进网站的性能、可用性和兼容性。这些指标由 Google 提出,包括: * LCP (Largest Contentful Paint) —— 最大内容渲染 * FID (First Input Delay) —— 首次输入延时 * CLS (Cumulative Layout Shift) —— 累积布局偏移Node.js 中的事件循环机制
* “事件循环机制” 是浏览器或 Node.js 对于主线程的调度方式,主线程寻找任务并执行的过程就是事件循环。 Node.js 的事件循环 * 事件循环的多个阶段: * timer * pending callbacks —— 对某些系统操作执行回调 * (idle) —— Node 内部使用 * (prepare) —— Node 内部使用 * poll (I/O) * check