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

作者:闭包旅人时间:2026-10-27 16:18:28浏览:430

本文通过具体代码示例解析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

作者最新文章