Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.12.2015, 16:46
Аватар для DynkanMaclaud
Профессор
Отправить личное сообщение для DynkanMaclaud Посмотреть профиль Найти все сообщения от DynkanMaclaud
 
Регистрация: 08.08.2014
Сообщений: 261

свойства обьекта Window
С Наступающим! Перед Новым Годом решил повозиться со свойствами обьекта window. Так вот проблемка в том что при переборе свойств
for(var key in window){console.log(key);}
в консоли нету например Array. хотя если проверить есть ли он в обьекте
if('Array' in window)
выдаст true... Поясните этот момент пожалуйста...
Ответить с цитированием
  #2 (permalink)  
Старый 31.12.2015, 20:55
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

Большинство свойств встроенных объектов 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>
Ответить с цитированием
  #3 (permalink)  
Старый 31.12.2015, 21:05
Профессор
Отправить личное сообщение для Mess4me Посмотреть профиль Найти все сообщения от Mess4me
 
Регистрация: 03.11.2014
Сообщений: 263

DynkanMaclaud,
Это скорей всего потому что свойство enumerable стоит false .
enumerable — если true, то свойство просматривается в цикле for..in и методе Object.keys(). По умолчанию false.
https://learn.javascript.ru/descriptors-getters-setters
Ответить с цитированием
  #4 (permalink)  
Старый 01.01.2016, 10:39
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

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

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

for(var i in window) {
  if(i == 'Array') {
  	console.log(true);
  }
}
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить неперечисляемые свойства обьекта nasdaq Общие вопросы Javascript 3 26.03.2015 13:13
this и свойства обьекта PashPP Общие вопросы Javascript 4 19.09.2012 19:18
Получить все свойства как строку. boilroom Events/DOM/Window 1 20.06.2011 17:37
Как получить список пользовательских функций объекта window? Маэстро Events/DOM/Window 13 03.07.2010 13:20
элемент с id в качестве свойства window Aleko Общие вопросы Javascript 1 28.04.2010 15:13