Сообщение от devote
|
Твой вариант не будет работать если я сделаю так:
var o = Object.create({}, {});
o[0] = null;
o.hasOwnProperty(0); // false
|
да точно
defineProperties только enumerable свойства берет из объекта с дескрипторами
devote, твой вариант не работает, если сделать так:
var desc = Object.create({}, {"0": {}});
var obj = Object.create({}, desc);
obj[1] = 1;
console.log(obj.hasOwnProperty(1));
а если вместо getOwnPropertyNames будем использовать keys, можем случайно удалить non-enumerable свойство. Вряд ли конечно кто-то так будет делать, но хочется 100% вариант)
-----------
наверное лучше getOwnPropertyDescriptor использользовать