推荐答案
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); // 输出: false
5. 删除不可配置的属性
如果对象的属性是不可配置的(即 configurable
为 false
),则 delete
操作会失败并返回 false
。
const obj = {}; Object.defineProperty(obj, 'a', { value: 1, configurable: false }); console.log(delete obj.a); // 输出: false
6. 删除原型链上的属性
delete
不能删除从原型链继承的属性。
const obj = Object.create({ a: 1 }); console.log(delete obj.a); // 输出: true(但实际上并未删除原型链上的属性) console.log(obj.a); // 输出: 1