对象为空,但对象属性不是

Object is empty but object property is not?

本文关键字:对象 属性      更新时间:2023-09-26

在什么情况下,一个对象可能是空的,但是该对象的一个属性不是空的?

代码:

console.log('type: '+typeof(widget));
console.log('obj: '+JSON.stringify(widget));
console.log('data: '+JSON.stringify(widget.data));
输出:

[INFO] :   type: object
[INFO] :   obj: {}
[INFO] :   data: {"index":2}

另外,for (var prop in widget)不执行,并且尝试调用widget.hasOwnProperty('data')会抛出错误。

编辑补充:我应该指定这是在钛,而不是直接的JS,因此console调用是钛调用,而不是Firebug等。

如果data不是一个可枚举的属性,它不会被字符串化。这可能就是这里发生的事情。

请参阅Object.defineProperty以更深入地了解不可枚举属性及其创建。

请注意,您可以以更有效的方式使用控制台:

console.log(typeof(widget), widget);
console.dir(widget);

不只是字符串。

作为题外话,我今天刚刚编写了一个stringifier考虑不可枚举的属性:JSON.prune.