也许这是一个天真的问题,但我必须要求专家意见......
我经常在表示对象状态的对象中使用临时属性。其中一个州是财产评估为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
?
编辑:
我当然意识到当我删除一个属性时,该属性会消失,当我将其设置为null
或undefined
时,它仍然存在。问题是在上述情况下删除财产是一种公认的做法。我想不是因为它更慢......
答案 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
对象
但是将属性设置为null
或undefined
将不会这样做。
您可以使用以下方法进行检查:
for(var i in obj) {
if (obj.hasOwnProperty(i)) {
console.log(i, '' + obj[i]);
}
}