Рассмотрим объект: — "ok"[Symbol.iterator]().__proto__

Это разрешает объект: —

 String Iterator {Symbol(Symbol.toStringTag): "String Iterator", next: ƒ} 

Однако Object.keys() не перечисляет свойства объекта.

 Object.keys("ok"[Symbol.iterator]().__proto__); 

возвращает []length: 0__proto__: Array(0)

Почему?

Маниш Диксит

новый участник этого сайта. Будьте внимательны, спрашивая разъяснения, комментируя и отвечая. Проверьте наш

Правила поведения

,

Это потому, что Object.keys только перечисляет перечислимые свойства (так, в основном: свойства, которые вы добавили самостоятельно). В качестве состояния документов MDN вы можете использовать Object.getOwnPropertyNames, если вы хотите получить не перечисляемые свойства.

Object.keys() возвращает все строковые ключи, тогда как в вашем случае ключи являются Symbols Чтобы получить все ключи Symbol используйте Object.getOwnPropertySymbols()

 Object.getOwnPropertySymbols("ok"[Symbol.iterator]().__proto__) 

Выход

 [Symbol(Symbol.toStringTag)] 

Вы также можете получить имена свойств с помощью

 Object.getOwnPropertyNames("ok"[Symbol.iterator]().__proto__) 

Выход

 ["next"]