一、作用、参数、返回值:

  作用:

1
2
3
delete 操作符用于删除对象的属性;
delete object.proerty  // 点操作符方式,常用
delete object['proerty'] //字符串属性名方式

  参数:

1
2
object : 对象名称,或者返回一个对象的表达式;
property : 将要删除的属性

  返回值:

1
delete 操作符 返回结果为 boolean 类型 (删除成功为 true,删除失败为 false)

  返回情况

  • 当被delete 的对象的属性存在并且拥有Don't Delete(对象属性的一个内部属性,拥有该内部属性表明该属性不能被删除)时,返回 false (在严格模式下抛出异常),否则返回 true;
  • 对象属性不存在时,也返回 true,所以无法根据返回值来判断是否成功删除;

二、delete 删除了什么:

  delete 操作符用于 删除 对象的属性;

  • 这里的属性实际上指的是属性本身,而不是属性指向的对象(对于引用类型来说);
  • 对于引用类型的值,delete 删除了对象属性的本身,但不会删除指向的对象;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**
 * 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

posted on   冷漠「」  阅读(975)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!



点击右上角即可分享
微信分享提示