我有一个关于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之前删除属性的第一个选项是否危险?
在将属性设置为null
之前,对其使用delete
是安全的,但这也是不必要的。我猜(但我可能错了(你试图确保前一项是垃圾收集的。如果是这样,那么您也不需要delete
。任何一种都会使前一项成为垃圾可回收项(假设某个地方没有其他代码段保留对它的引用(。
在设置之前删除属性的第一个选项是否危险属性为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);