属性赋值undefined和delete删除属性的不同点 - pod4g/tool GitHub Wiki
两者的不同
两者最大的不同在于:赋值undefined的话,属性还存在,还能被for in遍历到,而delete的属性无法被for in遍历到,相当于这个属性从来没有存在过(不然delete叫delete好意思嘛?)。
var obj = {a: 1};
for(var attr in obj){
console.log(attr); // a
}
obj.a = undefined; // or null
for(attr in obj){
console.log(attr); // a
}
delete obj.a;
for(attr in obj){
console.log(attr); // nothing!
}
IE8下的一个delete的bug
// Known issue: Will throw 'Uncaught ReferenceError: callback_*** is not defined' error if request timeout
function clearFunction(functionName) {
// IE8 throws an exception when you try to delete a property on window
// http://stackoverflow.com/a/1824228/751089
try {
delete window[functionName];
} catch (e) {
window[functionName] = undefined;
}
}