删除属性或将其设置为null?

时间:2014-09-24 07:19:37

标签: javascript

也许这是一个天真的问题,但我必须要求专家意见......

我经常在表示对象状态的对象中使用临时属性。其中一个州是财产评估为false时。例如:

// inside some method:
this.timer = setTimeout(function () {
  console.log('hello world');
}, 1000);

...

// inside another method:
if (this.timer) {
  clearTimeout(this.timer);
  this.timer = null;
}

当我清除计时器时,我可以像上面那样为其分配null,或者我可以从对象中删除它:

delete this.timer;

我不确定哪种方式更受欢迎。删除属性而不是将其设置为null

有什么缺点

编辑:

我当然意识到当我删除一个属性时,该属性会消失,当我将其设置为nullundefined时,它仍然存在。问题是在上述情况下删除财产是一种公认​​的做法。我想不是因为它更慢......

3 个答案:

答案 0 :(得分:2)

删除属性会删除该属性,而将其设置为null会使其成为... null。两者在概念上都不同:

  • 删除该媒体资源后,您会推断计时器不再存在
  • 将其设置为null会推断计时器不再具有值,但仍然存在。

答案 1 :(得分:0)

使用delete this.timer,您删除当前timer对象的this键→该密钥不再存在。

使用this.timer = null,您可以将null值分配给timer键→密钥仍然存在。

如果您将this对象转换为JSON,则timer可以在此处,也可以在for (key in this) {…}

答案 2 :(得分:0)

delete将真正从其所有者中删除该属性,代码为this对象 但是将属性设置为nullundefined将不会这样做。

您可以使用以下方法进行检查:

for(var i in obj) {
    if (obj.hasOwnProperty(i)) {
        console.log(i, '' + obj[i]);
    }
}