FEATURED · 精选文章

你知道 delete 删除属性时的一些细节吗?

发布时间 / 2026/9/15 10:40:02
来源 / 创域科博编辑部
栏目 / 资讯中心
你知道 delete 删除属性时的一些细节吗? 博主推荐前些天发现了一个巨牛的人工智能学习网站通俗易懂风趣幽默忍不住分享一下给大家。点击跳转到网站探究 delete 的一些细节起源于刚刚做过的一道笔试原题如下a1;constb2;console.log(deletea);console.log(deleteb);// 输出结果是// 答true false我可从来没用过 delete 的返回值但凡犹豫一秒都是对自己的不自信所以立马选择 undefined笔试结束后回想起来怎么会出这么奇怪的题于是自己实际试了一下真是不试不知道一试吓一跳啊delete 关键字是其实有返回值的并且 delete 还是有一些细节/规则的如果删除的属性不存在于对象本身delete 不起任何作用但仍会返回 true delete 只会删除对象自身属性不会删除对象原型链上的属性functionA(){}A.prototype.b1;constanewA();console.log(deletea.b,a.b);// true 1 删除对象自身不存在属性时返回true并且无法删除原型链上的属性不可配置的属性不能被删除返回 false 无法直接删除有声明的变量包括函数参数返回 false delete variable在严格模式下抛出 SyntaxError 错误任何使用 var 声明的属性不能从全局作用域或函数的作用域中删除因为即使它们可能附加到全局对象上它们也是不可配置的。任何使用 let 或 const 声明的属性不能够从它被声明的作用域中删除因为它们没有附加到任何对象上。现在看来同程旅行还是保守了要是现在的我我估计会出下面的题a1;// 绑定到了 globalThis 对象中varb2;// 绑定到了 globalThis 对象中constobj{};constd3;lete4;console.log(Object.getOwnPropertyDescriptor(globalThis,a).configurable);// trueconsole.log(Object.getOwnPropertyDescriptor(globalThis,b).configurable);// false通过var定义的全局变量虽然会被绑定到globalThis中但它是不可配置的console.log(deletea);// true a不是一个有声明的变量这时会去globalThis上找把globalThis.a给删了console.log(deleteb,b);// false 2 下面单独说console.log(deleteobj,obj);// false {} 对象 obj 没有被删因为 obj 是 const 声明console.log(deleteobj.c,obj.c);// true undefined 删除一个原本就不存在的属性返回 true console.log(deleted,d);// false 3 变量 d 没有被删因为它是 const 声明console.log(deletee,e);// false 4 变量 e 没有被删因为它是 let 声明console.log(deletef);// true删除一个原本就不存在的属性返回 true globalThis 就是全局对象浏览器下指向 window、node下指向 global。console.log(delete b, b);没有把 b 删除我们有两种解释跟 const、let 声明一样var 声明的变量无法直接被删除。b 没被删除是因为当 delete 去 globalThis 上找它时发现它是不可配置的所以无法删除。为了简单理解和减少歧义我更认同 1 的解释你可以想一下 2 的解释会引发哪些歧义如果您有更好的理解欢迎评论区留言var 声明的全局变量是不可配置的这个细节在“谈谈 var、const、let 的区别”的这个面试题中可以主动展开说一下
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻