在Chrome开发工具中,JavaScript对象的昏暗突出显示的属性表示什么?

时间:2014-04-06 15:26:06

标签: javascript google-chrome-devtools

我想知道,当我们在范围变量中看到或悬停在它们上面时(在Chrome开发人员工具中),对象的某些属性似乎是暗淡突出显示的。它意味着什么?

//示例代码

'use strict'
        function myClass(first, second) {
            //            this.pehla = first;
            var private_Var = 'i_am_private_variable';
            this.doosra = second;
            Object.defineProperty(this, 'pehla', { value: '_Haani_Constant', writable: false });

        };

        var instanceOfClass = new myClass('1', '2');

        console.log(instanceOfClass.pehla);
        console.log('Assigning value to pehla');
        console.log("instanceOfClass.pehla = 'SomeOtherText' ");

        try {
            instanceOfClass.pehla = 'SomeOtherText';                                   
        } catch (e) {
            console.log(e.message); 
        }

参见图片以供参考

enter image description here

3 个答案:

答案 0 :(得分:4)

变暗的属性是没有默认描述符属性的属性,即可配置,可写,可枚举的属性,将其中任何一个设置为false将导致属性变暗。

var test = {
   prop1:"test",
   prop2:"test",
   prop3:"test",
   prop4:"test",
   prop5:"test",
   prop6:"test",
   prop7:"test",
   prop8:"test",
   prop9:"test",
   prop10:"test",
};
Object.defineProperty(test,"other",{
   enumerable:true
});
Object.defineProperty(test,"other1",{
   enumerable:false
});   
Object.defineProperty(test,"other2",{
   writeable:false
});    
Object.defineProperty(test,"other3",{
   configurable:false
});    
console.log(test);

展开对象树时,您会看到other未变暗,other1other2other3为灰色

一些例外:

//other1 will not be dimmed for the following
Object.defineProperty(test,"other1",{
   enumerable:true,
   writeable:false,
   configurable:true
});   
Object.defineProperty(test,"other1",{
   enumerable:true,
   writeable:false,
   configurable:false
});  

答案 1 :(得分:1)

不可枚举的属性显示为灰色。另一个答案混淆的原因是默认情况下defineProperty将可枚举设置为false。因此,除非在参数中将enumerable显式设置为true,否则使用defineProperty定义的属性将变暗。

尝试运行以下代码来测试DevTools中不同属性的外观:

var test = {
   prop1:"test",
   prop2:"test",
   prop3:"test",
};
Object.defineProperty(test,"other",{
   enumerable:true
});
Object.defineProperty(test,"other1",{
   enumerable:false
});   
Object.defineProperty(test,"other2",{
   writeable:false
});    
Object.defineProperty(test,"other3",{
   configurable:false
});    
console.log(test);

并尝试运行以下代码以查看哪些属性实际可枚举:

for (i in test) console.log(i)

答案 2 :(得分:0)

通过简单地回复我公司网站上的String.prototype,它似乎是隐藏的,是继承/预先生成的属性&功能

e.g. 1

在这种情况下,numberFormatregexIndexOfregexLastIndexOf是我们为扩展类而创建的函数,稍后重用。它还解释了为什么通常在JSON或JS对象中,您通常会看到它们都是全彩色的。

另一个例子:

e.g. 2 e.g. 3