JavaScript标准内置对象
标准内置对象分类
- 值属性
- 函数属性
- 基本对象
- 错误对象
- 数字和日期对象
- 字符串
- 可索引的集合对象
- 使用键的集合对象
- 结构化数据
- 控制抽象对象
- 反射
- 国际化
- WebAssembly
- 其他
值属性
全局属性返回一个简单值,这些值没有自己的属性和方法。
writable | enumerable | configurable | |
Infinity | false | false | false |
NaN | false | false | false |
undefined | false | false | false |
globalThis | true | false | false |
函数属性
全局函数可以直接调用,不需要在调用时指定所属对象,执行结束后会将结果直接返回给调用者。
eval() |
会将传入的字符串当做 JavaScript 代码进行执行。 返回值:返回字符串中代码的返回值。如果返回值为空,则返回 undefined。 |
uneval() |
创建一个代表对象的源代码的字符串。 该特性是非标准的,请尽量不要在生产环境中使用它! |
isFinite() | 用来判断被传入的参数值是否为一个有限数值(finite number)。在必要情况下,参数会首先转为一个数值。 |
isNaN() |
用来确定一个值是否为NaN 。 返回值:如果给定值为 NaN则返回值为true;否则为false。 |
parseFloat() |
解析一个参数(必要时先转换为字符串)并返回一个浮点数。 返回值:给定值被解析成浮点数。如果给定值不能被转换成数值,则会返回 NaN。 |
parseInt() |
parseInt(string[, radix]) 解析一个字符串并返回指定基数的十进制整数, radix 是2-36之间的整数,表示被解析字符串的基数。 返回值:从给定的字符串中解析出的一个整数。 |
decodeURI() |
解码由encodeURI 创建或其它流程得到的统一资源标识符(URI)。 返回值:返回一个给定编码统一资源标识符(URI)的未编码版本的新字符串。 |
decodeURIComponent() | 用于解码由 encodeURIComponent 方法或者其它类似方法编码的部分统一资源标识符(URI)。 |
encodeURI() |
通过将特定字符的每个实例替换为一个、两个、三或四转义序列来对统一资源标识符 (URI) 进行编码 (该字符的 UTF-8 编码仅为四转义序列)由两个 "代理" 字符组成)。 返回值:一个新字符串, 表示提供的字符串编码为统一资源标识符 (URI)。 |
encodeURIComponent() |
基本对象
顾名思义,基本对象是定义或使用其他对象的基础。基本对象包括一般对象、函数对象和错误对象。
Object |
是 JavaScript 的一种 数据类型 。它用于存储各种键值集合和更复杂的实体。Objects 可以通过 Object() 构造函数或者使用 对象字面量 的方式创建。 在JavaScript中,几乎所有的对象都是Object类型的实例,它们都会从Object.prototype继承属性和方法,虽然大部分属性都会被覆盖(shadowed)或者说被重写了(overridden)。 除此之外,Object 还可以被故意的创建,但是这个对象并不是一个“真正的对象”(例如:通过 Object.create(null)),或者通过一些手段改变对象,使其不再是一个“真正的对象”(比如说: Object.setPrototypeOf)。 通过原型链,所有的 object 都能观察到 Object 原型对象(Object prototype object)的改变,除非这些受到改变影响的属性和方法沿着原型链被进一步的重写。尽管有潜在的危险,但这为覆盖或扩展对象的行为提供了一个非常强大的机制。 Object 构造函数为给定的参数创建一个包装类对象(object wrapper),具体有以下情况:
当以非构造函数形式被调用时,Object 的行为等同于 new Object()。 |
Function |
每个 JavaScript 函数实际上都是一个 Function 对象。运行 (function(){}).constructor === Function // true 便可以得到这个结论。 创建一个新的 Function 对象。直接调用此构造函数可以动态创建函数,但会遇到和 eval() 类似的的安全问题和(相对较小的)性能问题。然而,与 eval() 不同的是,Function 构造函数创建的函数只能在全局作用域中运行。 |
Boolean |
是一个布尔值的对象包装器。 如果需要,作为第一个参数传递的值将转换为布尔值。 如果省略或值为0,-0,null,false,NaN,undefined,或空字符串(""),则该对象具有的初始值是false。所有其他值,包括任何对象,空数组([])或字符串"false",都会创建一个初始值为true的对象。 注意不要将基本类型中的布尔值( true 和 false)与值为 true 和 false 的 Boolean 对象弄混了。 其值不是undefined或null的任何对象(包括其值为false的布尔对象)在传递给条件语句时都将计算为true。 |
Symbol |
symbol 是一种基本数据类型 (primitive data type)。Symbol()函数会返回symbol类型的值,该类型具有静态属性和静态方法。它的静态属性会暴露几个内建的成员对象;它的静态方法会暴露全局的symbol注册,且类似于内建对象类,但作为构造函数来说它并不完整,因为它不支持语法:"new Symbol()"。 每个从Symbol()返回的symbol值都是唯一的。一个symbol值能作为对象属性的标识符;这是该数据类型仅有的目的。 |
错误对象
错误对象是一种特殊的基本对象。它们拥有基本的 Error 类型,同时也有多种具体的错误类型。
Error | 通过Error的构造器可以创建一个错误对象。当运行时错误产生时,Error的实例对象会被抛出。Error对象也可用于用户自定义的异常的基础对象。 |
AggregateError | 这是一个实验中的功能,当多个错误需要包装在一个错误中时,该对象表示一个错误。 |
EvalError | 本对象代表了一个关于 eval 函数的错误.此异常不再会被JavaScript抛出,但是EvalError对象仍然保持兼容性. |
InternalError |
表示出现在JavaScript引擎内部的错误。 例如: "InternalError: too much recursion"(内部错误:递归过深)。 该特性是非标准的,请尽量不要在生产环境中使用它! |
RangeError |
标明一个错误,当一个值不在其所允许的范围或者集合中。 试图传递一个number参数给一个范围内不包含该number的函数时则会引发RangeError。当传递一个不合法的length值作为Array 构造器的参数创建数组,或者传递错误值到数值计算方法(Number.toExponential(),Number.toFixed() ,Number.toPrecision()),会出现RangeError。 |
ReferenceError | 引用错误,代表当一个不存在的变量被引用时发生的错误。 |
SyntaxError | 语法或者拼写错误,尝试解析语法上不合法的代码的错误。 |
TypeError |
类型错误,用来表示值的类型非预期类型时发生的错误。 当传入函数的操作数或参数的类型并非操作符或函数所预期的类型时,将抛出一个 TypeError 类型错误。 |
URIError | 用来表示以一种错误的方式使用全局URI处理函数而产生的错误。当向全局 URI 处理函数传递一个不合法的URI时,URIError 错误会被抛出。 |
数字和日期对象
用来表示数字、日期和执行数学计算的对象。
Number |
是经过封装的能让你处理数字值的对象。Number 对象由 Number() 构造器创建。 |
BigInt |
它提供了一种方法来表示大于 2^53 - 1 的整数。这原本是 Javascript中可以用 Number 表示的最大数字。BigInt 可以表示任意大的整数。 可以用在一个整数字面量后面加 n 的方式定义一个 BigInt ,如:10n,或者调用函数 BigInt()(但不包含 new 运算符)并传递一个整数值或字符串值。 |
Math |
是一个内置对象,它拥有一些数学常数属性和数学函数方法。Math 不是一个函数对象。Math 用于 Number 类型。它不支持 BigInt。 与其他全局对象不同的是,Math 不是一个构造器。Math 的所有属性与方法都是静态的。引用圆周率的写法是 Math.PI,调用正余弦函数的写法是 Math.sin(x),x 是要传入的参数。Math 的常量是使用 JavaScript 中的全精度浮点数来定义的。 |
Date | 创建一个 JavaScript Date 实例,该实例呈现时间中的某个时刻。Date 对象则基于 Unix Time Stamp,即自1970年1月1日(UTC)起经过的毫秒数。 |
字符串
用来表示和操作字符串的对象。
String |
全局对象是一个用于字符串或一个字符序列的构造函数。 你也能使用 String 函数将其他值生成或转换成字符串,从 ECMAScript 2015 开始,字符串字面量也可以称为模板字面量。 字符串对于保存可以以文本形式表示的数据非常有用。 一些常用的字符串操作有:查询字符串长度,使用 + 和 += 运算符来构建和连接字符串,使用 indexOf 方法检查某一子字符串在父字符串中的位置,又或是使用 substring 方法提取从父字符串中提取子字符串。 字符串字面量 (通过单引号或双引号定义) 和 直接调用 String 方法(没有通过 new 生成字符串对象实例)的字符串都是基本字符串。JavaScript会自动将基本字符串转换为字符串对象,只有将基本字符串转化为字符串对象之后才可以使用字符串对象的方法。当基本字符串需要调用一个字符串对象才有的方法或者查询值的时候(基本字符串是没有这些方法的),JavaScript 会自动将基本字符串转化为字符串对象并且调用相应的方法或者执行查询。 当使用 eval时,基本字符串和字符串对象也会产生不同的结果。eval 会将基本字符串作为源代码处理; 而字符串对象则被看作对象处理, 返回对象。 由于上述原因, 当一段代码在需要使用基本字符串的时候却使用了字符串对象就会导致执行失败(虽然一般情况下程序员们并不需要考虑这样的问题)。利用 valueOf 方法,我们可以将字符串对象转换为其对应的基本字符串。 |
RegExp |
用于将文本与一个模式匹配。 有两种方法可以创建一个 RegExp 对象:一种是字面量,另一种是构造函数。 |
可索引的集合对象
表示按照索引值来排序的数据集合,包括数组和类型数组,以及类数组结构的对象。
Array |
是用于构造数组的全局对象,数组是类似于列表的高阶对象。 数组是一种类列表对象,它的原型中提供了遍历和修改元素的相关操作。JavaScript 数组的长度和元素类型都是非固定的。因为数组的长度可随时改变,并且其数据在内存中也可以不连续,所以 JavaScript 数组不一定是密集型的,这取决于它的使用方式。一般来说,数组的这些特性会给使用带来方便,但如果这些特性不适用于你的特定使用场景的话,可以考虑使用类型数组 TypedArray。 只能用整数作为数组元素的索引,而不能用字符串。后者称为 关联数组。使用非整数并通过 方括号 或 点号 来访问或设置数组元素时,所操作的并不是数组列表中的元素,而是数组对象的 属性集合 上的变量。数组对象的属性和数组元素列表是分开存储的,并且数组的遍历和修改操作也不能作用于这些命名属性。 |
Int8Array | Int8Array 类型数组表示二进制补码8位有符号整数的数组。内容初始化为0。 一旦建立,你可以使用对象的方法引用数组中的元素,或使用标准数组索引语法( 即,使用括号注释)。 |
Uint8Array | Uint8Array 数组类型表示一个8位无符号整型数组,创建时内容被初始化为0。创建完后,可以以对象的方式或使用数组下标索引的方式引用数组中的元素。 |
Uint8ClampedArray | |
Int16Array | |
Uint16Array | |
Int32Array | |
Uint32Array | |
Float32Array | |
Float64Array | |
BigInt64Array | |
BigUint64Array |
使用键的集合对象
这些集合对象在存储数据时会使用到键,包括可迭代的Map 和 Set,支持按照插入顺序来迭代元素。
Map |
保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值)都可以作为一个键或一个值。 一个 Map 对象在迭代时会根据对象中元素的插入顺序来进行——一个 for...of 循环在每次迭代后会返回一个形式为 [key,value] 的数组。 |
Set |
Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。 Set对象是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即 Set 中的元素是唯一的。 因为 Set 中的值总是唯一的,所以需要判断两个值是否相等。在ECMAScript规范的早期版本中,这不是基于和===操作符中使用的算法相同的算法。具体来说,对于 Set s, +0 (+0 严格相等于-0)和-0是不同的值。然而,在 ECMAScript 2015规范中这点已被更改。有关详细信息,请参阅浏览器兼容性 表中的“Key equality for -0 and 0”。 另外,NaN和undefined都可以被存储在Set 中, NaN之间被视为相同的值(NaN被认为是相同的,尽管 NaN !== NaN)。 |
WeakMap |
WeakMap 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。 在 JavaScript 里,map API 可以 通过使其四个 API 方法共用两个数组(一个存放键,一个存放值)来实现。给这种 map 设置值时会同时将键和值添加到这两个数组的末尾。从而使得键和值的索引在两个数组中相对应。当从该 map 取值的时候,需要遍历所有的键,然后使用索引从存储值的数组中检索出相应的值。 但这样的实现会有两个很大的缺点: 首先赋值和搜索操作都是 O(n) 的时间复杂度(n 是键值对的个数),因为这两个操作都需要遍历全部整个数组来进行匹配。 正由于这样的弱引用,WeakMap 的 key 是不可枚举的(没有方法能给出所有的 key)。如果key 是可枚举的话,其列表将会受垃圾回收机制的影响,从而得到不确定的结果。因此,如果你想要这种类型对象的 key 值的列表,你应该使用 Map。 |
WeakSet |
允许你将弱保持对象存储在一个集合中。 如果传入一个可迭代对象作为参数, 则该对象的所有迭代值都会被自动添加进生成的 WeakSet 对象中。null 被认为是 undefined。 |
结构化数据
这些对象用来表示和操作结构化的缓冲区数据,或使用 JSON (JavaScript Object Notation)编码的数据。
ArrayBuffer |
用来表示通用的、固定长度的原始二进制数据缓冲区。 它是一个字节数组,通常在其他语言中称为“byte array”。 你不能直接操作 ArrayBuffer 的内容,而是要通过类型数组对象或 DataView 对象来操作,它们会将缓冲区中的数据表示为特定的格式,并通过这些格式来读写缓冲区的内容。 返回值:一个指定大小的 ArrayBuffer 对象,其内容被初始化为 0。 |
SharedArrayBuffer |
用来表示一个通用的、固定长度的原始二进制数据缓冲区,类似于 ArrayBuffer 对象,它们都可以用来在共享内存(shared memory)上创建视图。与 ArrayBuffer 不同的是,SharedArrayBuffer 不能被转移 (en-US)。 |
Atomics |
提供了一组静态方法对 SharedArrayBuffer 和 ArrayBuffer 对象进行原子操作。 这些原子操作属于 Atomics 模块。与一般的全局对象不同,Atomics 不是构造函数,因此不能使用 new 操作符调用,也不能将其当作函数直接调用。Atomics 的所有属性和方法都是静态的(与 Math 对象一样)。 原子操作 等待和通知 |
DataView | DataView 视图是一个可以从 二进制ArrayBuffer 对象中读写多种数值类型的底层接口,使用它时,不用考虑不同平台的字节序问题。 |
JSON | JSON 是一种语法,用来序列化对象、数组、数值、字符串、布尔值和 null 。它基于 JavaScript 语法,但与之不同。
JSON对象包含两个方法: 用于解析 JavaScript Object Notation (JSON) 的 parse() 方法,以及将对象/值转换为 JSON字符串的 stringify() 方法。除了这两个方法, JSON这个对象本身并没有其他作用,也不能被调用或者作为构造函数调用。 |
控制抽象对象
控件抽象可以帮助构造代码,尤其是异步代码(例如,不使用深度嵌套的回调)。
Promise |
Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值。 |
Generator(*发生器) | 生成器对象是由一个 generator function 返回的,并且它符合可迭代协议和迭代器协议。 |
GeneratorFunction |
GeneratorFunction构造器生成新的 生成器函数 对象。在JavaScript中,生成器函数实际上都是GeneratorFunction的实例对象。 注意,GeneratorFunction并不是一个全局对象。它可以通过后面的代码获取。Object.getPrototypeOf(function*(){}).constructor |
AsyncFunction |
AsyncFunction 构造函数用来创建新的 异步函数 对象,JavaScript 中每个异步函数都是 AsyncFunction 的对象。 注意,AsyncFunction 并不是一个全局对象,需要通过下面的方法来获取: Object.getPrototypeOf(async function(){}).constructor |
反射
Reflect |
Reflect 是一个内置的对象,它提供拦截 JavaScript 操作的方法。这些方法与proxy handlers (en-US)的方法相同。Reflect不是一个函数对象,因此它是不可构造的。 与大多数全局对象不同Reflect并非一个构造函数,所以不能通过new运算符对其进行调用,或者将Reflect对象作为一个函数来调用。Reflect的所有属性和方法都是静态的(就像Math对象)。 |
Proxy | Proxy 对象用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)。 |
国际化
ECMAScript核心的附加功能,用于支持多语言处理。
Intl | Intl 对象是 ECMAScript 国际化 API 的一个命名空间,它提供了精确的字符串对比、数字格式化,和日期时间格式化。Collator,NumberFormat 和 DateTimeFormat 对象的构造函数是 Intl 对象的属性。 |
Intl.Collator | collators的构造函数,用于启用对语言敏感的字符串比较的对象。 |
Intl.DateTimeFormat | 用于启用语言敏感的日期和时间格式的对象的构造函数。 |
Intl.ListFormat | Constructor for objects that enable language-sensitive list formatting. |
Intl.NumberFormat | 用于启用语言敏感数字格式的对象的构造函数。 |
Intl.PluralRules | 用于启用多种敏感格式和多种语言语言规则的对象的构造函数。 |
Intl.RelativeTimeFormat | Constructor for objects that enable language-sensitive relative time formatting. |
Intl.Locale | 是 Intl 对象的标准内置属性,用于表示 Unicode 区域标识。 |
WebAssembly
WebAssembly |
是所有 WebAssembly 相关功能的命名空间。 和大多数全局对象不一样,WebAssembly不是一个构造函数(它不是一个函数对象)。它类似于 Math 对象或者 Intl 对象,Math 对象也是一个命名空间对象,用于保存数学常量和函数;Intl则是用于国际化和其他语言相关函数的命名空间对象。 使用 WebAssembly.instantiate() 函数加载 WebAssembly 代码。 通过 WebAssembly.Memory()/WebAssembly.Table() 构造函数创建新的内存和表实例。 由 WebAssembly.CompileError()/WebAssembly.LinkError() (en-US)/WebAssembly.RuntimeError() 构造函数来提供 WebAssembly 中的错误信息。 方法WebAssembly.instantiate()用于编译和实例化 WebAssembly 代码的主 API,返回一个 Module 和它的第一个Instance实例。
|
WebAssembly.Global() | 创建一个新的WebAssembly Global 全局对象. |
WebAssembly.Module | 创建一个新的WebAssembly Module模块对象。 |
WebAssembly.Instance |
创建一个新的WebAssembly Instance实例对象。 |
WebAssembly.Memory | 创建一个新的WebAssembly Memory内存对象。 |
WebAssembly.Table | 创建一个新的WebAssembly Table表格对象。 |
WebAssembly.CompileError | 创建一个新的WebAssembly CompileError编译错误对象。 |
WebAssembly.LinkError (en-US) | 创建一个新的WebAssembly LinkError链接错误对象。 |
WebAssembly.RuntimeError | 创建一个新的WebAssembly RuntimeError运行时错误对象。 |
其他
arguments 是一个对应于传递给函数的参数的类数组对象。
如果你编写兼容ES6的代码, 那么优先推荐使用 剩余参数。
arguments是“类数组”, 意味着它有 长度 属性 并且属性的索引是从零开始的, 但是它没有 Array的 内置方法, 例如 forEach() 和 map()都是没有的。
arguments对象是所有(非箭头)函数中都可用的局部变量。你可以使用arguments对象在函数中引用函数的参数。此对象包含传递给函数的每个参数,第一个参数在索引0处。