Reflect.isExtensible()

Baseline 已广泛支持

此特性已非常成熟,可在多种设备和浏览器版本上使用。自 ⁨2016 年 9 月⁩以来,它已在各大浏览器中可用。

Reflect.isExtensible() 静态方法类似于 Object.isExtensible()。它用于确定一个对象是否是可扩展的(即是否可以向其添加新属性)。

试一试

const object1 = {};

console.log(Reflect.isExtensible(object1));
// Expected output: true

Reflect.preventExtensions(object1);

console.log(Reflect.isExtensible(object1));
// Expected output: false

const object2 = Object.seal({});

console.log(Reflect.isExtensible(object2));
// Expected output: false

语法

js
Reflect.isExtensible(target)

参数

目标

要检查是否可扩展的目标对象。

返回值

一个 Boolean 值,指示目标对象是否可扩展。

异常

TypeError

如果 target 不是一个对象,则抛出。

描述

Reflect.isExtensible() 提供了检查对象是否可扩展的反射语义。与 Object.isExtensible() 的唯一区别在于如何处理非对象目标。如果目标不是对象,Reflect.isExtensible() 会抛出 TypeError,而 Object.isExtensible() 对于非对象目标始终返回 false

Reflect.isExtensible() 调用 target[[IsExtensible]] 对象内部方法

示例

使用 Reflect.isExtensible()

另请参阅 Object.isExtensible()

js
// New objects are extensible.
const empty = {};
Reflect.isExtensible(empty); // true

// … but that can be changed.
Reflect.preventExtensions(empty);
Reflect.isExtensible(empty); // false

// Sealed objects are by definition non-extensible.
const sealed = Object.seal({});
Reflect.isExtensible(sealed); // false

// Frozen objects are also by definition non-extensible.
const frozen = Object.freeze({});
Reflect.isExtensible(frozen); // false

与 Object.isExtensible() 的区别

如果此方法的 target 参数不是对象(而是原始值),则会引发 TypeError。使用 Object.isExtensible() 时,非对象 target 将返回 false 而不引发任何错误。

js
Reflect.isExtensible(1);
// TypeError: 1 is not an object

Object.isExtensible(1);
// false

规范

规范
ECMAScript® 2026 语言规范
# sec-reflect.isextensible

浏览器兼容性

另见