Перечислимое свойство - это такое, которое может быть включено и посещено во время циклов for..in
(или аналогичная итерация свойств, например Object.keys()
).
Если свойство не идентифицировано как перечислимое, цикл игнорирует, что он находится внутри объекта.
var obj = { key: 'val' };
console.log('toString' in obj); // true
console.log(typeof obj.toString); // "function"
for (var key in obj)
console.log(key); // "key"
Свойство определяется как перечислимы или не по своей [[Enumerable]]
attribute. Вы можете рассматривать это как часть property's descriptor:
var descriptor = Object.getOwnPropertyDescriptor({ bar: 1 }, 'bar');
console.log(descriptor.enumerable); // true
console.log(descriptor.value); // 1
console.log(descriptor);
// { value: 1, writable: true, enumerable: true, configurable: true }
for..in
петля затем итерацию имена свойств объекта.
var foo = { bar: 1, baz: 2};
for (var prop in foo)
console.log(prop); // outputs 'bar' and 'baz'
Но только оценивает его заявление - console.log(prop);
в данном случае - для тех свойств, [[Enumerable]]
атрибут true
.
Это условие на месте, потому что объекты have many more properties, особенно from inheritance:
console.log(Object.getOwnPropertyNames(Object.prototype));
// ["constructor", "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", /* etc. */]
Каждое из этих свойств еще exists on the object:
console.log('constructor' in foo); // true
console.log('toString' in foo); // true
// etc.
Но они пропускаются (или "не подсчитывали ") в цикле for..in
, потому что они не перечислимы.
var descriptor = Object.getOwnPropertyDescriptor(Object.prototype, 'constructor');
console.log(descriptor.enumerable); // false
Вы понимаете, что означает 'for-in'? –
Из ответов, которые я получил, для .. .. позволяет все перечисленные свойства объекта быть доступными для использования с оператором for. – Patrick
Простейшим значением является то, будет ли свойство создаваться в цикле 'for in' или нет (для те, кто не хочет знать подробности или просто не волнует;)) –