Что означают цвета в панели инструментов разработчика Chrome?

Мне любопытно, почему некоторые переменные являются твердыми, а некоторые переменные-полупрозрачными. В чем разница между ними? Оба варианта доступны в глобальном масштабе.

screenshot

1 ответов


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

возьмите объект location в качестве примера:

Location logged in console

при перечислении свойств toString, valueOf и __proto__ не появлюсь:

var keys = []; for (var key in location) { keys.push(key) }; console.log(keys)
-> ["replace", "assign", "hash", "search", "pathname", "port", "hostname", "host",  
"protocol", "origin", "href", "ancestorOrigins", "reload"]

можно использовать propertyIsEnumerable чтобы узнать, будет ли свойство отображаться при цикле над объект:

location.propertyIsEnumerable("search")
// true
location.propertyIsEnumerable("toString")
// false

по умолчанию перечисляются все свойства объекта:

post.title is enumerable

но вы можете изменить это с помощью defineProperty:

Object.defineProperty(post, "author", {
     value: "John Doe",
     enumerable: false
});

когда вы регистрируете этот объект в консоли, свойство author появляется в несколько более светлом оттенке фиолетового.

(кажется, что сокращенная версия не поддерживает эту функцию форматирования, но мы можем заставить DevTools использовать более длинную версию для небольшого объект, использующий .)

author property isn't enumerable