delete
运算符用于删除对象的属性或数组的元素。 delete obj.property
或 delete array[index]
。
一、Delete键在JavaScript中的基本概念
在JavaScript中,delete
是一个运算符,用于删除对象的属性或者数组的元素,它主要作用于对象的可枚举属性以及数组的元素(通过索引访问)。
delete object.property;
或者
delete object['property'];
object
是要操作的对象,property
是想要删除的属性名。
let person = { name: "John", age: 30, city: "New York" }; console.log(person); // 输出:{ name: 'John', age: 30, city: 'New York' } delete person.age; console.log(person); // 输出:{ name: 'John', city: 'New York' }
在这个例子中,使用delete
运算符删除了person
对象中的age
属性,需要注意的是,delete
只能删除对象自身的属性,不能删除从原型链继承来的属性。
function Person() { this.name = "John"; } Person.prototype.greet = function() { console.log("Hello"); }; let person1 = new Person(); console.log(delete person1.greet); // 输出:false
这里尝试删除从原型链继承的greet
方法,返回false
表示删除失败。
delete array[index];
array
是要操作的数组,index
是要删除元素的索引。
let fruits = ["apple", "banana", "cherry"]; console.log(fruits); // 输出:["apple", "banana", "cherry"] delete fruits[1]; console.log(fruits); // 输出:["apple", undefined, "cherry"]
当使用delete
删除数组中的元素时,被删除的元素会变为undefined
,并且数组的长度不会改变,这与使用splice
等方法不同,splice
会真正地移除元素并调整数组长度。
delete
运算符返回一个布尔值,如果成功删除属性或元素,则返回true
;否则返回false
。
let obj = { a: 1, b: 2 }; console.log(delete obj.a); // 输出:true console.log(delete obj.c); // 输出:false(因为对象中没有c属性)
配置属性:对于某些特殊的属性,如不可配置(configurable)的属性,delete
可能无法删除,使用Object.defineProperty
定义的不可配置属性:
let obj = {}; Object.defineProperty(obj, 'prop', { value: 42, configurable: false }); console.log(delete obj.prop); // 输出:false
严格模式:在严格模式下,尝试删除不可删除的属性会导致抛出错误。
"use strict"; let obj = Object.freeze({ prop: 123 }); delete obj.prop; // 会抛出TypeError错误
问题1:为什么删除数组元素后数组长度不变?
答:这是因为delete
运算符只是将数组指定索引处的值设置为undefined
,并没有真正地移除数组中的元素,所以数组的长度保持不变,如果要真正移除元素并调整数组长度,可以使用splice
方法。
let arr = [1, 2, 3, 4]; arr.splice(1, 1); // 从索引1开始删除1个元素 console.log(arr); // 输出:[1, 3, 4],此时数组长度变为3
问题2:delete
运算符和splice
方法删除数组元素有什么区别?
答:delete
运算符删除数组元素时,只是将对应索引处的值设置为undefined
,数组长度不变;而splice
方法是真正地移除数组中的元素,并且会根据参数调整数组长度。
let arr1 = [1, 2, 3, 4]; delete arr1[1]; console.log(arr1); // 输出:[1, undefined, 3, 4],长度为4 let arr2 = [1, 2, 3, 4]; arr2.splice(1, 1); console.log(arr2); // 输出:[1, 3, 4],长度为3