JavaScript 内置构造函数

目录

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 编程领域,数据类型构成了程序构建的基础框架。JavaScript 主要涵盖 6 种数据类型,大体可分为两类:

  • 基本数据类型:包括字符串、数值、布尔、undefinednull。这些基本数据类型具备简单、不可变的特性,直接存储于栈内存中,在实际使用时,简洁高效,为程序的基础数据处理提供了便利。
  • 引用类型:即对象。对象作为一种复杂的数据结构,存储在堆内存中,通过引用进行访问。这种存储和访问方式为数据的组织与操作赋予了更大的灵活性,使得开发者能够构建出更为复杂和强大的程序逻辑。

在实际的 JavaScript 编程过程中,我们常常会遇到一些看似特殊的现象。例如,当定义一个普通字符串并访问其length属性时:

// 普通字符串

const str = 'andy'

console.log(str.length) // 4

这表明,即使是像字符串这样的基本数据类型,也拥有部分类似对象的行为。事实上,JavaScript 为字符串、数值、布尔等基本类型提供了专门的构造函数,通过这些构造函数创建的对象被称作包装类型。借助包装类型,基本数据类型得以临时拥有对象的属性和方法,极大地拓展了自身的功能。这也意味着,在 JavaScript 中,几乎所有的数据都能够通过构造函数来创建。

1. Object

Object作为 JavaScript 中最为基础的构造函数之一,为开发者提供了众多强大的工具,用于对象的操作与管理。其中,有三个常用的静态方法特别值得深入学习。

1.1 Object.keys

  • 作用Object.keys静态方法的作用是获取对象中所有的属性名(键)。在需要遍历对象属性、进行数据统计或筛选时,这个方法非常实用。比如,在分析一个包含用户信息的对象时,可以通过Object.keys快速获取所有的属性名,进而了解对象的结构。
  • 语法
const o = { name: '佩奇', age: 6 }

// 获得对象的所有键,并且返回是一个数组

const arr = Object.keys(o)

console.log(arr) // ['name', 'age']
  • 注意:该方法返回的是一个包含所有属性名的数组,数组元素的顺序与对象中属性的定义顺序一致。这一特性在需要按照特定顺序处理属性时尤为重要。

1.2 Object.values

除了Object.keysObject.values也是一个常用的静态方法。

  • 作用Object.values方法返回一个包含对象所有属性值的数组。当我们只关注对象的值,而不关心属性名时,这个方法能派上大用场。例如,在统计一个包含成绩的对象中的所有成绩总和时,Object.values可以快速获取所有成绩值。
  • 语法示例
const obj = { a: 1, b: 2, c: 3 };

const values = Object.values(obj);

console.log(values); // [1, 2, 3]

1.3 Object.entries

  • 作用Object.entries方法返回一个包含对象可枚举属性的键值对数组。每个键值对都是一个包含两个元素的数组,第一个元素是属性名,第二个元素是属性值。在需要同时处理对象的属性名和属性值时,这个方法提供了极大的便利。比如,在将对象数据转换为特定格式的数组时,Object.entries能简化操作流程。
  • 语法示例
const obj = { a: 1, b: 2, c: 3 };

const entries = Object.entries(obj);

console.log(entries); // [['a', 1], ['b', 2], ['c', 3]]

2. Array

数组是 JavaScript 中常用的数据结构之一,用于存储和管理一组有序的数据。JavaScript 为Array构造函数提供了丰富的实例方法,这些方法可以帮助我们高效地操作数组。

2.1 数组常见实例方法 - 核心方法

方法

作用

说明

forEach

遍历数组

不返回数组,常用于查找遍历数组元素,对每个元素执行指定的回调函数。比如,在查找数组中所有大于 10 的元素时,可以使用forEach遍历数组并进行判断。

filter

过滤数组

返回新数组,返回的是筛选满足条件的数组元素,通过回调函数判断元素是否符合条件。例如,从一个包含多个数字的数组中筛选出所有偶数,filter就能轻松实现。

map

迭代数组

返回新数组,返回的是处理之后的数组元素,对每个元素进行处理并返回新值。比如,将数组中的每个元素都乘以 2,map方法可以简洁地完成这个操作。

reduce

累加器

返回累计处理的结果,常用于求和、计算乘积、合并对象等场景,通过回调函数对数组元素进行累加或其他累计操作。在计算数组中所有元素的乘积时,reduce方法可以发挥重要作用。

2.2 reduce

  • 作用reduce方法是数组操作中非常强大的一个方法,它可以返回累计处理的结果,常用于求和、计算乘积、合并对象等场景。比如,在计算购物车中所有商品的总价时,reduce方法可以快速实现。
  • 基本语法
arr.reduce(function() {}, 起始值)

arr.reduce(function(上一次值, 当前值) {}, 初始值)

const arr = [1, 2, 3, 4]
  • 参数:如果有起始值,则把初始值累加到计算过程中。起始值的存在可以改变计算的起始点和结果。例如,在计算数组元素之和时,若起始值为 10,最终结果会比没有起始值时大 10。
  • reduce 执行过程
    1. 如果没有起始值,则上一次值以数组的第一个数组元素的值。
    2. 每一次循环,把返回值做为下一次循环的上一次值。
    3. 如果有起始值,则起始值做为上一次值。

代码示例

// 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

2.3 其他实用实例方法

除了上述核心方法,Array还有很多其他实用的实例方法,这些方法在日常编程中也经常用到。

  • push:向数组末尾添加一个或多个元素,并返回新的数组长度。例如:
let arr = [1, 2, 3];

let newLength = arr.push(4);

console.log(arr); // [1, 2, 3, 4]

console.log(newLength); // 4
  • pop:移除数组末尾的一个元素,并返回该元素。例如:
let arr = [1, 2, 3];

let removedElement = arr.pop();

console.log(arr); // [1, 2]

console.log(removedElement); // 3
  • shift:移除数组的第一个元素,并返回该元素。例如:
let arr = [1, 2, 3];

let removedElement = arr.shift();

console.log(arr); // [2, 3]

console.log(removedElement); // 1
  • unshift:向数组开头添加一个或多个元素,并返回新的数组长度。例如:
let arr = [2, 3];

let newLength = arr.unshift(1);

console.log(arr); // [1, 2, 3]

console.log(newLength); // 3
  • splice:用于添加或删除数组中的元素。可以实现删除元素、插入元素、替换元素等操作。例如,删除元素:
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]

3. String 构造函数

String构造函数用于创建字符串对象。在大多数情况下,我们直接使用字符串字面量来定义字符串,因为这种方式简洁明了。然而,在处理一些复杂的字符串操作时,String构造函数提供的方法和功能就显得尤为重要。例如:

const str = new String("Hello World");

String对象拥有许多常用方法,这些方法可以帮助我们对字符串进行各种处理。

  • toUpperCase:将字符串转换为大写。例如:
let str = "hello world";

let upperStr = str.toUpperCase();

console.log(upperStr); // HELLO WORLD
  • toLowerCase:将字符串转换为小写。例如:
let str = "HELLO WORLD";

let lowerStr = str.toLowerCase();

console.log(lowerStr); // hello world
  • charAt:返回字符串中指定位置的字符。例如:
let str = "hello world";

let char = str.charAt(4);

console.log(char); // o
  • substring:返回字符串的子串。例如:
let str = "hello world";

// 从索引2开始,到索引5(不包含)

let subStr = str.substring(2, 5);

console.log(subStr); // llo

4. Number 构造函数

Number构造函数用于创建数字对象,它为我们提供了丰富的方法,用于数字的处理和转换操作。例如:

const num = new Number(42);

Number对象的常见方法如下:

  • toFixed:将数字四舍五入为指定的小数位数。例如:
let num = 19.99;

let fixedNum = num.toFixed(1);

console.log(fixedNum); // 20.0
  • toString:将数字转换为字符串。例如:
let num = 123;

let str = num.toString();

console.log(typeof str); // string

5. Boolean 构造函数

Boolean构造函数用于创建布尔值对象(truefalse)。在实际编程中,我们通常使用字面量来定义布尔值,因为它更加简洁直观。然而,在某些复杂的逻辑操作中,Boolean构造函数可以为我们提供更多的灵活性。例如:

const isActive = new Boolean(true);

Boolean对象主要用于逻辑操作中的条件判断。比如:

let isDone = new Boolean(false);

if (isDone) {

  console.log('任务已完成');

} else {

  console.log('任务未完成');

}

6. 集合对象的构造函数

6.1 Set 构造函数

Set是 JavaScript 中的集合对象,它用于存储唯一的值,值可以是任何类型,包括基本数据类型和对象。这使得Set在需要确保数据唯一性的场景中非常有用。例如:

const set = new Set([1, 2, 3, 4, 4]);

console.log(set); // Set(4) { 1, 2, 3, 4 }

Set对象提供了一些常用方法,用于操作集合中的元素。

  • add:向集合中添加一个新值。例如:
let set = new Set([1, 2, 3]);

set.add(4);

console.log(set); // Set(4) { 1, 2, 3, 4 }
  • has:检查集合中是否包含某个值。例如:
let set = new Set([1, 2, 3]);

console.log(set.has(2)); // true

console.log(set.has(4)); // false
  • delete:从集合中移除指定值。例如:
let set = new Set([1, 2, 3]);

set.delete(2);

console.log(set); // Set(2) { 1, 3 }

6.2 Map 构造函数

Map是一个键值对集合,它的键和值可以是任意类型。与普通对象相比,Map提供了更灵活的键值对管理方式,并且可以更好地处理复杂的数据结构。例如:

const map = new Map();

map.set("name", "John");

map.set("age", 30);

Map对象的常用方法如下:

  • set:向Map中添加键值对。例如:
let map = new Map();

map.set("city", "New York");

console.log(map); // Map(1) { 'city' => 'New York' }
  • get:获取指定键对应的值。例如:
let map = new Map([["name", "John"], ["age", 30]]);

console.log(map.get("name")); // John
  • has:检查是否存在指定的键。例如:
let map = new Map([["name", "John"], ["age", 30]]);

console.log(map.has("age")); // true

console.log(map.has("city")); // false

6.3 WeakSet 和 WeakMap 构造函数

WeakSetWeakMapSetMap的弱引用版本,它们主要用于存储对象引用。与SetMap不同的是,WeakSetWeakMap不会阻止垃圾回收器回收这些对象,这使得它们在处理大量临时对象时非常有用。例如:

let obj = { name: "John" };

const weakSet = new WeakSet();

weakSet.add(obj);

const weakMap = new WeakMap();

weakMap.set(obj, "metadata");

由于是弱引用,当对象没有其他强引用时,垃圾回收器可能会随时回收该对象,WeakSetWeakMap中关于该对象的引用也会随之消失。

7. 错误处理的构造函数

7.1 Error 构造函数

Error构造函数用于创建错误对象,并在代码中抛出错误。通过抛出错误,我们可以在程序出现异常时及时捕获并处理,从而提高程序的稳定性和可靠性。同时,Error构造函数可以为错误提供详细的消息,以便于调试和排查问题。例如:

const error = new Error("Something went wrong");

throw error;

Error有一些常用子类,每个子类都用于表示特定类型的错误。

  • TypeError:表示类型错误。例如:
let num = "123";

// 这里会抛出TypeError,因为字符串不能直接进行数学运算

let result = num + 1;
  • RangeError:表示数值超出允许范围。例如:
// 创建一个长度为负数的数组,会抛出RangeError

let arr = new Array(-1);
  • ReferenceError:表示引用错误,当引用一个不存在的变量时会抛出。例如:
console.log(nonExistentVariable); // 抛出ReferenceError

8. 其他常用构造函数

8.1 Date 构造函数

Date构造函数用于处理日期和时间。通过Date构造函数,我们可以创建表示特定日期和时间的对象,并对日期和时间进行各种操作。例如:

const now = new Date();

console.log(now); // 输出当前日期和时间