夏令时
ES5解决方案可以是:
// for enumerable and non-enumerable properties
Object.getOwnPropertyNames(obj).forEach(function (prop) {
delete obj[prop];
});
断续器
ES6解决方案可以是:
// for enumerable and non-enumerable properties
for (const prop of Object.getOwnPropertyNames(obj)) {
delete obj[prop];
}
性能
无论规格如何,最快的解决方案通常是:
// for enumerable and non-enumerable of an object with proto chain
var props = Object.getOwnPropertyNames(obj);
for (var i = 0; i < props.length; i++) {
delete obj[props[i]];
}
// for enumerable properties of shallow/plain object
for (var key in obj) {
// this check can be safely omitted in modern JS engines
// if (obj.hasOwnProperty(key))
delete obj[key];
}
应仅在浅层或普通对象上执行的原因是,它遍历原型继承的属性,而不仅仅是可以删除的自己的属性。如果不确定某个对象是普通的,并且属性是可枚举的,则 with 是更好的选择。for..in
for
Object.getOwnPropertyNames