JSON.stringify和Object.keys在同一个对象上产生不同的结果
我有一个问题对我没有任何意义。我想知道你们有没有人可以帮忙。JSON.stringify和Object.keys在同一个对象上产生不同的结果
我有一个数据源对象,我用它来访问REST数据。所有复杂的异步工作都能正常工作,但我完全没有想到将选项传递给数据源配置的简单任务。
目前,我有这样的功能:
object.addSourceOption = function(model, optKey, optVal){
if(!_.has(config.sources, model)){ return this; }
else{
var options = config.sources[model]["options"];
options[optKey] = optVal;
console.log(options[optKey]);
//options = JSON.parse(JSON.stringify());
console.log("Source Option: " + optKey + ": " + optVal
+" added for model: " + model);
var debugString = JSON.stringify(options);
console.log(debugString);
console.log(Object.keys(options));
}
return this;
};
这个函数被调用,它的被据我可以看到一个名为具有良好的价值观。这里的一些调试输出的一个例子(在这种情况下,键值为“post_get”和值是一个函数,并打印):
function (element){
}
restData2.js:189 Source Option: post_get: function (element){
} added for model: Contacts
restData2.js:191 {}
restData2.js:192 ["post_get"]
我不明白为什么JSON.stringify和对象。键会产生不同的结果。我不明白要调试我正在使用的代码,或者可能在幕后发生的事情,以使这两个函数对我写的代码不同意。
恭喜!你找到的JSON.stringify(...)
:)
微妙的部分之一下面是一个有用的部分来自MDN:
如果
undefined
,函数或符号转换过程中遇到它要么省略(当它在一个对象中被发现时)或删去(当它在数组中被发现时)。JSON.stringify
也可以在传入“纯”值时返回undefined
,例如JSON.stringify(function(){})
或JSON.stringify(undefined)
。
虽然JSON很方便,因为它看起来像Javascript,JSON实际上是Javascript的一个子集。而且,并不是所有的JS对象都可以用JSON表示。详细信息请见http://json.org/。
但是,在您的示例中,post_get
未显示在JSON中,因为类型函数的属性在JSON中不合法。
希望这会有所帮助!
旁白:
另外,请记住,有时JS对象可以不受任何Object.keys(...)
返回的属性,因为Object.keys(...)只返回是属性不从该对象扩展的任何原型(基础对象)继承。
密钥值为“post_get”和值是一个函数
JSON.stringify()
将不包括引用的功能性质。 Object.keys()
会。就这么简单。
非常感谢。这是一个非常有用的评论,它绝对帮助我摆脱这个困扰。如果我想到了这一点,功能将会被忽略掉,这很明显,而且大多数情况下,我们会想要的。但我没有那么想。所以谢谢。 – aphenine
@aphenine - 很高兴帮助:)。我看到你是Stack Overflow的新手 - 如果你同意这是正确的答案,你应该把它标记为:)。这将有助于未来的游客。 –