一、作用、参数、返回值:
作用:
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!