JavaScript中delete操作符对引用类型对象的影响

作者:闭包旅人

时间:2026-10-27

浏览:429

本文通过具体代码示例解析JavaScript中delete操作符的行为。测试表明,当删除包含引用类型属性的对象时,delete仅切断当前对象对该引用对象的指针指向,而不会删除引用对象本身。其他持有相同引用的变量仍可查看原数据,深入理解指针机制有助于避免内存泄漏和逻辑错误。

文章目录

JavaScript delete操作符对引用类型的影响

以下示例展示了相关现象:

代码实现如下:

var testVar = {
a : {
test : 1
            }
        },
test1 = {},
test2 = {};
test1.a = testVar.a;
test2.a = testVar.a;
/*
delete test1.a;
console.log(test1.a); // undefined
console.log(test2.a); // Object {test: 1}
console.log(testVar.a); // Object {test: 1}
*/
delete testVar.a;
console.log(test1.a); // Object {test: 1}
console.log(test2.a); // Object {test: 1}
console.log(testVar.a); // undefined

通过上述测试可以得出,在JavaScript中,若使用delete删除的属性值为引用类型,该操作实际上移除的是当前对象指向该引用对象的指针,而非引用对象本身。因此,即使执行了delete testVar.a,test1.a所指向的对象依然存在于内存中且未被删除。 关于JavaScript中delete关键字的底层原理,推荐阅读:

http://perfectionkills.com/understanding-delete/

该文章的中文翻译版本:

http://www.ituring.com.cn/article/7620

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章