JavaScript常用小知识

一.Number.MAX_SAFE_INTEGER

在 JavaScript 中,Number.MAX_SAFE_INTEGER 是一个常量,表示 JavaScript 中能够安全表示的最大整数值,其值为 9007199254740991。这是因为 JavaScript 的数字是基于 IEEE 754 双精度浮点数(64 位),安全整数范围是从 −253+1-2^{53} + 1−253+1 到 253−12^{53} - 1253−1。超出这个范围的整数可能会导致精度丢失。

1
let minDiff = Number.MAX_SAFE_INTEGER;

总结

通过使用 Number.MAX_SAFE_INTEGER 初始化变量,开发者确保了在后续比较中,所有合法的差值都会比初始值小,从而正确更新 minDiff

二.解构赋值

1. 解构赋值基础

解构赋值是一种从数组或对象中提取值,并将其赋值给变量的语法。

数组的解构赋值

1
2
3
let arr = [1, 2, 3];
let [a, b] = arr;
console.log(a, b); // 输出: 1 2
  • 作用:将数组 arr 的第一个元素赋值给 a,第二个元素赋值给 b

2. 同时赋值与交换变量

在 JavaScript 中,通过解构赋值可以实现多个变量的同时赋值或交换值。

交换两个变量的值

传统方法:

1
2
3
4
5
let a = 1, b = 2;
let temp = a;
a = b;
b = temp;
console.log(a, b); // 输出: 2 1

使用解构赋值:

1
2
3
let a = 1, b = 2;
[a, b] = [b, a];
console.log(a, b); // 输出: 2 1

优点

  • 更简洁。
  • 不需要额外的临时变量。

4. 注意事项

  1. 语法要求
    • 适用于 ES6 及以上版本。
    • 只能用于数组或对象的赋值操作。
  2. 不可变性问题
    • 解构赋值直接修改了数组原本的值,需注意副作用。

三、JavaScript 全局对象和方法

JavaScript 提供了一些全局对象和方法,这些方法不属于任何特定的模块或类,可以直接在任何地方调用。它们通常用于执行通用任务,例如类型转换、编码、解码和错误处理。


1. 全局对象的定义

全局对象是 JavaScript 运行时环境中默认可用的对象,允许直接访问而无需引入或定义。例如:

  • 浏览器环境中的全局对象是 window
  • Node.js 环境中的全局对象是 global

全局对象中包含的常用全局方法有:parseIntparseFloatisNaN 等。


2. 常见全局方法分类

(1)类型转换方法

这些方法用于将数据从一种类型转换为另一种类型。

方法描述
parseInt将字符串解析为整数,支持进制指定。
parseFloat将字符串解析为浮点数。
Number将字符串或其他值转换为数字类型,但不支持进制。
String将数字、布尔值或对象转换为字符串。
Boolean将值转换为布尔值(truefalse)。
BigInt将数字或字符串转换为 BigInt 类型(支持大数操作)。

(2)检查数据有效性的方法

这些方法用于检查数据的有效性,例如是否是数字或是否有限。

方法描述
isNaN检查值是否为 NaN(非数字)。
isFinite检查值是否为有限数(非 Infinity)。

(3)编码与解码方法

这些方法用于编码和解码 URL 和 Base64 字符串。

方法描述
encodeURI对整个 URI 进行编码(不对保留字符编码)。
encodeURIComponent对 URI 组件进行编码(对所有字符编码,包括保留字符)。
decodeURI对整个编码的 URI 进行解码。
decodeURIComponent对编码的 URI 组件进行解码。
btoa将字符串编码为 Base64(浏览器专用)。
atob将 Base64 解码为字符串(浏览器专用)。

(4)错误处理方法

这些方法用于抛出和捕获错误。

方法描述
eval解释并执行 JavaScript 代码字符串(不推荐使用)。
throw手动抛出错误。
try...catch捕获运行时错误。

(5)全局范围相关方法

这些方法用于全局范围的操作。

方法描述
globalThis提供一个跨环境的全局对象(如 windowglobal 等)。

3. 重点全局方法的使用示例

(1)parseInt

解析字符串为整数,支持指定进制:

1
2
console.log(parseInt("101", 2)); // 输出:5(二进制)
console.log(parseInt("20", 10)); // 输出:20(十进制)

(2)parseFloat

解析字符串为浮点数:

1
2
console.log(parseFloat("3.14")); // 输出:3.14
console.log(parseFloat("3.14abc")); // 输出:3.14(忽略后续非数字内容)

(3)isNaNisFinite

检查数据有效性:

1
2
console.log(isNaN("abc")); // 输出:true(非数字)
console.log(isFinite(1 / 0)); // 输出:false(Infinity 不是有限数)

(4)encodeURIdecodeURI

对 URI 进行编码和解码:

1
2
3
4
const uri = "https://example.com/page?name=张三";
const encoded = encodeURI(uri);
console.log(encoded); // 输出:https://example.com/page?name=%E5%BC%A0%E4%B8%89
console.log(decodeURI(encoded)); // 输出:https://example.com/page?name=张三

(5)btoaatob

Base64 编码与解码(仅在浏览器环境可用):

1
2
3
4
const str = "Hello World!";
const base64 = btoa(str);
console.log(base64); // 输出:SGVsbG8gV29ybGQh
console.log(atob(base64)); // 输出:Hello World!

4. 特别说明:注意事项

  1. 全局方法的安全性
    • eval 存在安全性风险,不推荐使用。
    • 对于用户输入的数据,使用 parseIntparseFloat 时要注意验证合法性。
  2. 跨环境差异
    • 部分全局方法(如 btoaatob)在 Node.js 环境中不可用,需使用 Buffer 替代。
  3. 进制转换小心陷阱
    • 使用 parseInt 时,如果未指定进制参数,字符串可能会被解析为十进制或八进制(旧版浏览器行为)。

在JavaScript中,slice() 是一个数组和字符串的方法,用于返回数组或字符串的一个浅拷贝(不改变原始数组或字符串)的一部分。它接受两个参数:起始索引和结束索引(可选)。

slice的语法:

对于数组:

1
array.slice(start, end)
  • start:可选,指定开始提取元素的位置(默认为 0)。如果是负数,表示从末尾开始计算。
  • end:可选,指定停止提取的位置(不包括该位置的元素)。如果未指定,默认提取到数组的末尾。如果是负数,表示从末尾开始计算。

对于字符串:

1
string.slice(start, end)
  • startend 的作用同数组。

示例:

对数组的使用:

1
2
3
4
5
let arr = [1, 2, 3, 4, 5];

console.log(arr.slice(1, 4)); // 输出 [2, 3, 4]
console.log(arr.slice(2)); // 输出 [3, 4, 5]
console.log(arr.slice(-3, -1)); // 输出 [3, 4]

对字符串的使用:

1
2
3
4
5
let str = "Hello, World!";

console.log(str.slice(0, 5)); // 输出 "Hello"
console.log(str.slice(7)); // 输出 "World!"
console.log(str.slice(-6, -1)); // 输出 "World"

注意事项:

  • slice() 不会改变原始的数组或字符串,它返回的是一个新数组或新字符串。
  • 如果 start 大于 endslice() 会返回一个空数组或空字符串。
  • 如果 startend 超出了范围,slice() 会自动调整为数组或字符串的边界。

四,判断是否为回文数

1
2
3
//通过位运算的方法来创建一个新的数据并且比较是不是同一个数字  // 方法一
return x.toString() === x.toString().split('').reverse().join('')// 方法二
//先转化为字符串,然后通过双指针的方式来看是不是回文数 // 方法三