理解JS中的delete运算符

时间:2013-12-16 19:18:29

标签: javascript

据我了解delete运算符删除相应的引用,而不是通过此引用定位的对象。让我们有一个简单的对象并将delete运算符应用于此属性之一,例如

var o= {prop: "property", test: "sometext"};
delete o.prop;

我们是否删除了"property"字符串本身,或者我们仅删除了对此的引用,而"property"字符串将被垃圾收集器删除为无引用。

3 个答案:

答案 0 :(得分:2)

从技术上讲,是的,你删除了属性和值本身,因为它不再被引用,将被单独使用。

您可以通过让两个属性引用一个对象来检查:如果删除其他属性,则不会触及其中一个属性。

答案 1 :(得分:1)

下面这段代码将帮助您使用测试对象和console.log获得可视化结果,这样您就可以看到对象属性会发生什么。

删除前,当我们console.log(); obj.prop1,它会在你的控制台中说“哟”。 删除后,这将变为未定义。

你可以使用删除来清理未使用的属性,或者不再需要它们,这不是一个很大的速度提升,但是当你的网站通过便宜的机器查看时可能会有用。

<script type="text/javascript">

    var obj = {

        prop1: 'yo',
        prop2: 'yo'

    };

    console.log(obj.prop1);
    delete obj.prop1;
    console.log(obj.prop1);

    console.log(obj); //Will return only prop 2, prop1 is removed from the object.

</script>

<强> PS:

记录整个对象后,属性完全消失。

答案 2 :(得分:1)

根据its repsective MDN article,JavaScript中的delete关键字“会从对象中删除属性。”也就是说,如果o.prop引用了一个对象(而不是一个字符串),那么对该对象的引用(即o.prop)将被删除,但是如果存在,则该对象可能会保留在内存中指向它的一些其他变量/属性。