0

我正在尝试在替换函数中序列化不可枚举的属性。

这里有什么问题?

请帮忙。

var obj = {x:1,y:2};
Object.defineProperty(obj,"x",{enumerable:false});


var s = JSON.stringify(obj,function(key,value){
if(this.propertyIsEnumerable(key) == false){
Object.defineProperty(this,key,{enumerable:true});
}
return value;});

//"{"y":2}"
// x remains not enumerable

我猜不可枚举的属性在执行替换函数之前被过滤掉了。没有把握。

4

1 回答 1

1

如果.stringify过滤掉不可枚举的属性,那么是的,它们在回调中不可用 - 它已经完成了该过滤器。为什么不在字符串化之前遍历对象的所有键,并使用内部的逻辑将其设置为可枚举(如果还没有的话)。然后,只需简单地调用JSON.stringify(obj);. 不幸的是,正如您所指出的,for in循环和 jQuery$.each不会遍历不可枚举的键。我发现.getOwnPropertyNames应该完成你想要的 - https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames

这是使用它的示例,类似于您提供的代码:

http://jsfiddle.net/9Em82/

var obj = {x:1,y:2};

Object.defineProperty(obj,"x",{enumerable:false});

var all = Object.getOwnPropertyNames(obj);
for (var i = 0, j = all.length; i < j; i++) {
    console.log("KEY: " + all[i]);
}
于 2012-11-25T08:15:23.243 回答