目录
JavaScript 内置构造函数
1. Object
1.1 Object.keys
1.2 Object.values
1.3 Object.entries
2. Array
2.1 数组常见实例方法 - 核心方法
2.2 reduce
2.3 其他实用实例方法
3. String 构造函数
4. Number 构造函数
5. Boolean 构造函数
6. 集合对象的构造函数
6.1 Set 构造函数
6.2 Map 构造函数
6.3 WeakSet 和 WeakMap 构造函数
7. 错误处理的构造函数
7.1 Error 构造函数
8. 其他常用构造函数
8.1 Date 构造函数
在 JavaScript 编程领域,数据类型构成了程序构建的基础框架。JavaScript 主要涵盖 6 种数据类型,大体可分为两类:
在实际的 JavaScript 编程过程中,我们常常会遇到一些看似特殊的现象。例如,当定义一个普通字符串并访问其length属性时:
// 普通字符串
const str = 'andy'
console.log(str.length) // 4
这表明,即使是像字符串这样的基本数据类型,也拥有部分类似对象的行为。事实上,JavaScript 为字符串、数值、布尔等基本类型提供了专门的构造函数,通过这些构造函数创建的对象被称作包装类型。借助包装类型,基本数据类型得以临时拥有对象的属性和方法,极大地拓展了自身的功能。这也意味着,在 JavaScript 中,几乎所有的数据都能够通过构造函数来创建。
Object作为 JavaScript 中最为基础的构造函数之一,为开发者提供了众多强大的工具,用于对象的操作与管理。其中,有三个常用的静态方法特别值得深入学习。
const o = { name: '佩奇', age: 6 }
// 获得对象的所有键,并且返回是一个数组
const arr = Object.keys(o)
console.log(arr) // ['name', 'age']
除了Object.keys,Object.values也是一个常用的静态方法。
const obj = { a: 1, b: 2, c: 3 };
const values = Object.values(obj);
console.log(values); // [1, 2, 3]
const obj = { a: 1, b: 2, c: 3 };
const entries = Object.entries(obj);
console.log(entries); // [['a', 1], ['b', 2], ['c', 3]]
数组是 JavaScript 中常用的数据结构之一,用于存储和管理一组有序的数据。JavaScript 为Array构造函数提供了丰富的实例方法,这些方法可以帮助我们高效地操作数组。
方法 |
作用 |
说明 |
forEach |
遍历数组 |
不返回数组,常用于查找遍历数组元素,对每个元素执行指定的回调函数。比如,在查找数组中所有大于 10 的元素时,可以使用forEach遍历数组并进行判断。 |
filter |
过滤数组 |
返回新数组,返回的是筛选满足条件的数组元素,通过回调函数判断元素是否符合条件。例如,从一个包含多个数字的数组中筛选出所有偶数,filter就能轻松实现。 |
map |
迭代数组 |
返回新数组,返回的是处理之后的数组元素,对每个元素进行处理并返回新值。比如,将数组中的每个元素都乘以 2,map方法可以简洁地完成这个操作。 |
reduce |
累加器 |
返回累计处理的结果,常用于求和、计算乘积、合并对象等场景,通过回调函数对数组元素进行累加或其他累计操作。在计算数组中所有元素的乘积时,reduce方法可以发挥重要作用。 |
arr.reduce(function() {}, 起始值)
arr.reduce(function(上一次值, 当前值) {}, 初始值)
const arr = [1, 2, 3, 4]
代码示例:
// 1. 没有初始值
const arr = [1, 5, 8]
const total = arr.reduce(function (prev, current) {
return prev + current
})
console.log(total)
// 2. 有初始值
const total = arr.reduce(function (prev, current) {
return prev + current
}, 10)
console.log(total)
// 3. 箭头函数的写法
const total = arr.reduce((prev, current) => prev + current, 10)
console.log(total)
无初始值时执行过程:
上一次值 |
当前值 |
返回值(第一次循环) |
1 |
5 |
6 |
6 |
8 |
14 |
有初始值时执行过程:
上一次值 |
当前值 |
返回值(第一次循环) |
10 |
1 |
11 |
11 |
5 |
16 |
16 |
8 |
24 |
除了上述核心方法,Array还有很多其他实用的实例方法,这些方法在日常编程中也经常用到。
let arr = [1, 2, 3];
let newLength = arr.push(4);
console.log(arr); // [1, 2, 3, 4]
console.log(newLength); // 4
let arr = [1, 2, 3];
let removedElement = arr.pop();
console.log(arr); // [1, 2]
console.log(removedElement); // 3
let arr = [1, 2, 3];
let removedElement = arr.shift();
console.log(arr); // [2, 3]
console.log(removedElement); // 1
let arr = [2, 3];
let newLength = arr.unshift(1);
console.log(arr); // [1, 2, 3]
console.log(newLength); // 3
let arr = [1, 2, 3, 4, 5];
// 从索引2开始,删除2个元素
let removedElements = arr.splice(2, 2);
console.log(arr); // [1, 2, 5]
console.log(removedElements); // [3, 4]
插入元素:
let arr = [1, 2, 5];
// 从索引2开始,删除0个元素,插入3和4
arr.splice(2, 0, 3, 4);
console.log(arr); // [1, 2, 3, 4, 5]
替换元素:
let arr = [1, 2, 5];
// 从索引2开始,删除1个元素,插入3和4
arr.splice(2, 1, 3, 4);
console.log(arr); // [1, 2, 3, 4]
String构造函数用于创建字符串对象。在大多数情况下,我们直接使用字符串字面量来定义字符串,因为这种方式简洁明了。然而,在处理一些复杂的字符串操作时,String构造函数提供的方法和功能就显得尤为重要。例如:
const str = new String("Hello World");
String对象拥有许多常用方法,这些方法可以帮助我们对字符串进行各种处理。
let str = "hello world";
let upperStr = str.toUpperCase();
console.log(upperStr); // HELLO WORLD
let str = "HELLO WORLD";
let lowerStr = str.toLowerCase();
console.log(lowerStr); // hello world
let str = "hello world";
let char = str.charAt(4);
console.log(char); // o
let str = "hello world";
// 从索引2开始,到索引5(不包含)
let subStr = str.substring(2, 5);
console.log(subStr); // llo
Number构造函数用于创建数字对象,它为我们提供了丰富的方法,用于数字的处理和转换操作。例如:
const num = new Number(42);
Number对象的常见方法如下:
let num = 19.99;
let fixedNum = num.toFixed(1);
console.log(fixedNum); // 20.0
let num = 123;
let str = num.toString();
console.log(typeof str); // string
Boolean构造函数用于创建布尔值对象(true或false)。在实际编程中,我们通常使用字面量来定义布尔值,因为它更加简洁直观。然而,在某些复杂的逻辑操作中,Boolean构造函数可以为我们提供更多的灵活性。例如:
const isActive = new Boolean(true);
Boolean对象主要用于逻辑操作中的条件判断。比如:
let isDone = new Boolean(false);
if (isDone) {
console.log('任务已完成');
} else {
console.log('任务未完成');
}
Set是 JavaScript 中的集合对象,它用于存储唯一的值,值可以是任何类型,包括基本数据类型和对象。这使得Set在需要确保数据唯一性的场景中非常有用。例如:
const set = new Set([1, 2, 3, 4, 4]);
console.log(set); // Set(4) { 1, 2, 3, 4 }
Set对象提供了一些常用方法,用于操作集合中的元素。
let set = new Set([1, 2, 3]);
set.add(4);
console.log(set); // Set(4) { 1, 2, 3, 4 }
let set = new Set([1, 2, 3]);
console.log(set.has(2)); // true
console.log(set.has(4)); // false
let set = new Set([1, 2, 3]);
set.delete(2);
console.log(set); // Set(2) { 1, 3 }
Map是一个键值对集合,它的键和值可以是任意类型。与普通对象相比,Map提供了更灵活的键值对管理方式,并且可以更好地处理复杂的数据结构。例如:
const map = new Map();
map.set("name", "John");
map.set("age", 30);
Map对象的常用方法如下:
let map = new Map();
map.set("city", "New York");
console.log(map); // Map(1) { 'city' => 'New York' }
let map = new Map([["name", "John"], ["age", 30]]);
console.log(map.get("name")); // John
let map = new Map([["name", "John"], ["age", 30]]);
console.log(map.has("age")); // true
console.log(map.has("city")); // false
WeakSet和WeakMap是Set和Map的弱引用版本,它们主要用于存储对象引用。与Set和Map不同的是,WeakSet和WeakMap不会阻止垃圾回收器回收这些对象,这使得它们在处理大量临时对象时非常有用。例如:
let obj = { name: "John" };
const weakSet = new WeakSet();
weakSet.add(obj);
const weakMap = new WeakMap();
weakMap.set(obj, "metadata");
由于是弱引用,当对象没有其他强引用时,垃圾回收器可能会随时回收该对象,WeakSet和WeakMap中关于该对象的引用也会随之消失。
Error构造函数用于创建错误对象,并在代码中抛出错误。通过抛出错误,我们可以在程序出现异常时及时捕获并处理,从而提高程序的稳定性和可靠性。同时,Error构造函数可以为错误提供详细的消息,以便于调试和排查问题。例如:
const error = new Error("Something went wrong");
throw error;
Error有一些常用子类,每个子类都用于表示特定类型的错误。
let num = "123";
// 这里会抛出TypeError,因为字符串不能直接进行数学运算
let result = num + 1;
// 创建一个长度为负数的数组,会抛出RangeError
let arr = new Array(-1);
console.log(nonExistentVariable); // 抛出ReferenceError
Date构造函数用于处理日期和时间。通过Date构造函数,我们可以创建表示特定日期和时间的对象,并对日期和时间进行各种操作。例如:
const now = new Date();
console.log(now); // 输出当前日期和时间