Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   свойства обьекта Window (https://javascript.ru/forum/events/60458-svojjstva-obekta-window.html)

DynkanMaclaud 31.12.2015 16:46

свойства обьекта Window
 
С Наступающим! Перед Новым Годом решил повозиться со свойствами обьекта window. Так вот проблемка в том что при переборе свойств
for(var key in window){console.log(key);}
в консоли нету например Array. хотя если проверить есть ли он в обьекте
if('Array' in window)
выдаст true... Поясните этот момент пожалуйста...

EmperioAf 31.12.2015 20:55

Большинство свойств встроенных объектов javascript перебираться в цикле for..in не будут, так как помечены специальным внутренним флагом DontEnum.
Этот флаг нельзя получить или поменять.

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>ГГ</title>
<style>
</style>
</head>
<body>
<div id="myid"></div>
<script>
for(var key in window){console.log(key);}
console.log('Array' in window);
console.log('myid' in window);
</script>
<!-- <script src="http://localhost:35729/livereload.js"></script> -->
</body>
</html>

Mess4me 31.12.2015 21:05

DynkanMaclaud,
Это скорей всего потому что свойство enumerable стоит false .
enumerable — если true, то свойство просматривается в цикле for..in и методе Object.keys(). По умолчанию false.
https://learn.javascript.ru/descriptors-getters-setters

ruslan_mart 01.01.2016 10:39

Потому что у встроенных объектов enumerable по умолчанию false.

Object.defineProperty(window, 'Array', {
  get: function() {
    return [].constructor;
  },
  enumerable: true
});

for(var i in window) {
  if(i == 'Array') {
  	console.log(true);
  }
}


Часовой пояс GMT +3, время: 19:06.