Object.isExtensible()用于判断对象是否可扩展,即能否动态添加新属性;默认可扩展,调用Object.preventExtensions()后不可扩展,但不影响已有属性的修改或删除;传入非对象类型会抛错,原始值包装后默认返回false。

Object.isExtensible() 用于判断一个对象是否处于“可扩展”状态,即是否允许动态添加新属性。
什么是可扩展(extensible)?
一个对象默认是可扩展的,意味着你可以给它添加新的自有属性。一旦设为不可扩展(通过 Object.preventExtensions()),就不能再添加新属性,但已有的属性仍可修改或删除(除非它们本身被冻结或设为不可配置)。
基本用法很简单
直接传入目标对象,返回布尔值:
const obj = {};
console.log(Object.isExtensible(obj)); // true
Object.preventExtensions(obj);
console.log(Object.isExtensible(obj)); // false
```
注意几个常见情况
- 对 null 或 undefined 调用会抛出 TypeError,必须传入对象类型(包括数组、函数、Date 等)
- 原始值(如字符串、数字)会被自动包装,但包装后的对象默认不可扩展,所以 Object.isExtensible("hello") 返回 false
- 使用 Object.freeze() 或 Object.seal() 后的对象,一定不可扩展(因为这两个方法内部先调用了 preventExtensions)
- 不可扩展只限制“新增属性”,不影响已有属性的读写、重配置(只要该属性本身允许)
和 in 操作符、hasOwnProperty 的区别
isExtensible 不关心属性是否存在,也不检查属性是否可枚举或可配置。它只回答一个问题:“现在还能不能加新属性?” 它和 in、hasOwnProperty、Object.getOwnPropertyDescriptor 解决的是不同层面的问题,不要混用。
立即学习“Java免费学习笔记(深入)”;


















