我有个关于delete运算符的问题。
在将属性设置为NULL之前删除属性的第一个选项是否危险?
对不起,这真的只是一个理解性的问题,如果有人能给我解释一下,我会很高兴的。
备选案文1:
var requestPool = context.get('requestPool');
requestPool.pool[id].to = setTimeout(function() {
delete requestPool.pool[id];
}, msg.modbusJob.timeout);
备选方案2:
requestPool.pool[id].to = setTimeout(function() {
requestPool.pool[id].to = null;
if(requestPool.pool[id]) {
delete requestPool.pool[id];
}
}, msg.modbusJob.timeout);
在将属性设置为NULL之前删除属性的第一个选项是否危险?
我会这样写:
setTimeout(function() {
if(requestPool && requestPool.pool && requestPool.pool[id]) {
delete requestPool.pool[id];
}
}, msg.modbusJob.timeout);
或者使用更现代的语法:
setTimeout(() => {
if(requestPool?.pool && requestPool.pool[id]) {
delete requestPool.pool[id];
}
}, msg.modbusJob.timeout);
在将属性设置为NULL之前删除属性的第一个选项是否危险?
在将属性设置为null
之前,对其使用delete
是安全的,但这也是不必要的。我猜(但我可能是错的)你正在尝试确保前一个项目是垃圾收集的。如果是这样,您也不需要delete
它。其中任何一个都将使前一项成为垃圾可回收项(假设某个地方没有其他代码段保持对它的引用)。