0

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

代码:

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')会引发错误。

编辑添加:我应该指定这是在 Titanium 中,而不是直接的 JS,因此console调用是 Titanium 调用而不是 Firebug 等。

4

1 回答 1

3

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

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

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

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

它不仅适用于字符串。

顺便说一句,我今天刚刚编写了一个考虑不可枚举属性的字符串化器:JSON.prune

于 2013-06-05T19:47:14.050 回答