推荐答案
delete 运算符用于删除对象的属性或数组的元素。它返回一个布尔值,表示删除操作是否成功。如果删除成功,返回 true;如果删除失败,返回 false。
const obj = { a: 1, b: 2 };
delete obj.a; // 返回 true
console.log(obj); // 输出: { b: 2 }
const arr = [1, 2, 3];
delete arr[1]; // 返回 true
console.log(arr); // 输出: [1, empty, 3]本题详细解读
1. delete 运算符的作用
delete 运算符用于删除对象的属性或数组的元素。它不会直接释放内存,而是将属性或元素从对象或数组中移除。
2. 删除对象属性
当 delete 用于删除对象属性时,它会从对象中移除该属性。如果属性存在且可以被删除,delete 返回 true;如果属性不存在或不能被删除(例如,属性是继承的或不可配置的),delete 返回 false。
const obj = { a: 1, b: 2 };
console.log(delete obj.a); // 输出: true
console.log(delete obj.c); // 输出: true(属性不存在,但仍然返回 true)
console.log(obj); // 输出: { b: 2 }3. 删除数组元素
当 delete 用于删除数组元素时,它会将数组中的该元素设置为 empty,但不会改变数组的长度。删除后的数组元素位置会变为 empty,而不是 undefined。
const arr = [1, 2, 3]; console.log(delete arr[1]); // 输出: true console.log(arr); // 输出: [1, empty, 3] console.log(arr.length); // 输出: 3
4. 删除全局变量或函数
delete 不能删除使用 var、let 或 const 声明的变量或函数。它只能删除对象的属性。
var x = 10;
console.log(delete x); // 输出: false
function foo() {}
console.log(delete foo); // 输出: false5. 删除不可配置的属性
如果对象的属性是不可配置的(即 configurable 为 false),则 delete 操作会失败并返回 false。
const obj = {};
Object.defineProperty(obj, 'a', { value: 1, configurable: false });
console.log(delete obj.a); // 输出: false6. 删除原型链上的属性
delete 不能删除从原型链继承的属性。
const obj = Object.create({ a: 1 });
console.log(delete obj.a); // 输出: true(但实际上并未删除原型链上的属性)
console.log(obj.a); // 输出: 1