试一试
const object = {
foo: 42,
};
Reflect.deleteProperty(object, "foo");
console.log(object.foo);
// Expected output: undefined
const array = [1, 2, 3, 4, 5];
Reflect.deleteProperty(array, "3");
console.log(array);
// Expected output: Array [1, 2, 3, <1 empty slot>, 5]
语法
js
Reflect.deleteProperty(target, propertyKey)
参数
目标-
要删除属性的目标对象。
propertyKey-
要删除的属性的名称。
返回值
一个布尔值,指示属性是否已成功删除。
异常
TypeError-
如果
target不是一个对象,则抛出。
描述
Reflect.deleteProperty() 提供了 delete 操作符的反射语义。也就是说,Reflect.deleteProperty(target, propertyKey) 在语义上等同于
js
delete target.propertyKey;
在非常底层的级别,删除属性会返回一个布尔值(正如 Proxy 的 handler 的情况)。Reflect.deleteProperty() 直接返回状态,而在 严格模式下,如果状态为 false,delete 会抛出 TypeError。在非严格模式下,delete 和 Reflect.deleteProperty() 的行为相同。
Reflect.deleteProperty() 调用 target 的 [[Delete]] 对象内部方法。
示例
使用 Reflect.deleteProperty()
js
const obj = { x: 1, y: 2 };
Reflect.deleteProperty(obj, "x"); // true
console.log(obj); // { y: 2 }
const arr = [1, 2, 3, 4, 5];
Reflect.deleteProperty(arr, "3"); // true
console.log(arr); // [1, 2, 3, <1 empty slot>, 5]
// Returns true if no such property exists
Reflect.deleteProperty({}, "foo"); // true
// Returns false if a property is unconfigurable
Reflect.deleteProperty(Object.freeze({ foo: 1 }), "foo"); // false
规范
| 规范 |
|---|
| ECMAScript® 2026 语言规范 # sec-reflect.deleteproperty |
浏览器兼容性
加载中…