一、作用、参数、返回值:
作用:
delete 操作符用于删除对象的属性; delete object.proerty // 点操作符方式,常用 delete object['proerty'] //字符串属性名方式
参数:
object : 对象名称,或者返回一个对象的表达式; property : 将要删除的属性
返回值:
delete 操作符 返回结果为 boolean 类型 (删除成功为 true,删除失败为 false)
返回情况:
- 当被delete 的对象的属性存在并且拥有Don't Delete(对象属性的一个内部属性,拥有该内部属性表明该属性不能被删除)时,返回 false (在严格模式下抛出异常),否则返回 true;
- 对象属性不存在时,也返回 true,所以无法根据返回值来判断是否成功删除;
二、delete 删除了什么:
delete 操作符用于 删除 对象的属性;
- 这里的属性实际上指的是属性本身,而不是属性指向的对象(对于引用类型来说);
- 对于引用类型的值,delete 删除了对象属性的本身,但不会删除指向的对象;
/**
* testObj : 对象名称
* preperty : 对象属性 (指 对象名称testObj 中的 a,b,c,d 属性)
* @type {{a: number, b: string, c: number[], d: {s: number}}}
*/
let referenceArray = [1,2,3,4];
let referenceObj = {s : 11};
let testObj1 = {
a: 10, // 引用类型
b: '字符串', // 引用类型
c: referenceArray, // 非引用类型
d: referenceObj // 非引用类型
}
console.info(testObj1); // '{"a":10,"b":"字符串","c":[1,2,3,4],"d":{"s":11}}'
// 删除 不存在的属性
console.info(delete testObj1.xxx); // true
/**
* 删除非引用类型
*/
// 在删除之前,先打印出来
console.info(testObj1.b); // 字符串
// 删除存在的属性(非引用类型)
console.info(delete testObj1.b); // true
// 打印删除后的属性
console.info(testObj1.b); // undefined
/**
* 删除引用类型
*/
// 在删除之前,先打印出来
console.info(testObj1.d); // '{"s":11}'
console.info(referenceObj); // '{"s":11}'
// 删除存在的属性(引用类型)
console.info(delete testObj1.d); // true
// 打印删除后的 属性
console.info(testObj1.d); // undefined
// 打印 引用类型
console.info(referenceObj); // '{"s":11}'
原理后面在研究;
参考博客:https://www.w3cplus.com/javascript/deep-in-delete.html#:~:text=%E5%9C%A8%E5%AE%9E%E9%99%85%E7%9A%84%20JavaScript%E4%B8%AD%EF%BC%8C%20delete%20o.x%20%E4%B9%8B%E5%90%8E%EF%BC%8CObject%20%E5%AF%B9%E8%B1%A1%E4%BC%9A%E7%94%B1%E4%BA%8E%E5%A4%B1%E5%8E%BB%E4%BA%86%E5%BC%95%E7%94%A8%E8%80%8C%E8%A2%AB%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6%EF%BC%8C%20%E6%89%80%E4%BB%A5%20delete,o.x%20%E6%89%80%E6%8C%87%E5%90%91%E7%9A%84%E5%AF%B9%E8%B1%A1%EF%BC%8C%E4%BD%86%E8%BF%99%E4%B8%AA%E5%8A%A8%E4%BD%9C%E5%B9%B6%E4%B8%8D%E6%98%AF%20ECMAScript%20%E6%A0%87%E5%87%86%EF%BC%8C%E4%B9%9F%E5%B0%B1%E6%98%AF%E8%AF%B4%EF%BC%8C%E5%8D%B3%E4%BD%BF%E6%9F%90%E4%B8%AA%E5%AE%9E%E7%8E%B0%E5%AE%8C%E5%85%A8%E4%B8%8D%E5%88%A0%E9%99%A4%20Object%20%E5%AF%B9%E8%B1%A1%EF%BC%8C%E4%B9%9F%E4%B8%8D%E7%AE%97%E6%98%AF%E8%BF%9D%E5%8F%8D%20ECMAScript%20%E6%A0%87%E5%87%86%E3%80%82
浙公网安备 33010602011771号