在Chrome Developer Tools Console中使用console.dir时,淡化属性的重要性是什么

时间:2015-04-23 11:17:47

标签: javascript google-chrome debugging object

在chrome控制台中使用console.dir()时,对象的属性稍微褪色是什么意思。

例如,看看" top,width,worldVisible,x& ý"在此屏幕截图中。

Screenshot of developer tools

我在这里查看了API参考https://developer.chrome.com/devtools/docs/console-api#consoledirobject,但没有运气。

由于

2 个答案:

答案 0 :(得分:36)

Faded属性apper表示不可枚举的属性。如果我们这样做:

var a = {};
Object.defineProperties(a, {
    hello: { enumerable: false },
    world: { enumerable: true }
});
console.dir(a);

然后我们看到hello已褪色,而world则不然。

console image showing faded <code>hello</code> property

在您的代码中,如果您执行for(prop in obj) { console.log(prop); }(其中obj是您在控制台屏幕截图中显示的任何对象),您将看到只有枚举的属性不会被枚举。< / p>

您还可以使用Object.getOwnPropertyDescriptor(obj, "worldVisible")进行检查,enumerable: false应返回具有(...)属性的对象。

请注意,属性名称上的斜体表示属性值由getter函数定义。 (这也会导致值在函数运行之前显示public void Analizar(IEnumerable<byte> bytes) { var listado = new List<AnalisisResumenDiarioGenerico>(); using (var e = bytes.GetEnumerator()) { var arr = new byte[5]; var posModFive = 0; while (e.MoveNext()) { arr[posModFive] = e.Current; posModFive++; if (posModFive == 5) { listado.Add(ObtenerPaquete(arr)); posModFive = 0; } } if (posModFive != 0) { /* Hey, 5 did not divide the total length! */ } } //InsertInDB(listado); } 值。)这是一个完全独立的可枚举问题,导致名称褪色。您可以使用不是褪色的非可枚举属性的斜体getter定义属性,反之亦然。

答案 1 :(得分:0)

我无法在文档中找到任何官方解释,但我有一个很好的猜测基于一些测试灰色属性是由Javascript引擎默认/设置而不是代码本身。以下是一些例子:

数组中的

length
var foo = [1,2,3,45,1337];
console.dir(foo);

在控制台中提供:

console screenshot with length grayed out

请注意,索引不会显示为length,而__proto__中的所有内容都是。

原型

来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype#Examples

的代码
var Person = function() {
  this.canTalk = true;
};

Person.prototype.greet = function() {
  if (this.canTalk) {
    console.log('Hi, I am ' + this.name);
  }
};

var Employee = function(name, title) {
  Person.call(this);
  this.name = name;
  this.title = title;
};

Employee.prototype = Object.create(Person.prototype);
Employee.prototype.constructor = Employee;

Employee.prototype.greet = function() {
  if (this.canTalk) {
    console.log('Hi, I am ' + this.name + ', the ' + this.title);
  }
};

var bob = new Employee('Bob', 'Builder');
bob.greet();
console.dir(bob);

在控制台中提供:

enter image description here

这里有很多有趣的事情。 greet的所有实例都不会显示为灰色。但是,__proto__到处都是灰色的(可能是因为引擎将其设置为原型)。此外,来自Person的重写构造函数也显示为灰色,但Employee的显式设置构造函数未显示为灰色。

所以我认为这里有一个粗略的模式,就是Chrom(e / ium)灰化了它认为你不太可能关心的属性,要么是因为它们是继承的,要么是由引擎设置的作为语言的构造,但它似乎并不完美。 (但是谁是对的?)另一个有趣的尝试是 F12 并输入console.dir(window)。在那里你几乎看到一切都变得灰暗,除了网站的Javascript把它放到全局窗口命名空间中。