我有一个对我没有任何意义的问题。我想知道你们中是否有人可以提供帮助。
我有一个数据源对象,我用它来访问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和Objects.keys会产生不同的结果。我不明白应该信任哪些来调试我正在使用的代码,或者可能在幕后发生的事情使这两个函数对我编写的代码不一致。
答案 0 :(得分:1)
恭喜!您已找到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(...)只返回不是的属性从对象扩展的任何原型(基础对象)继承。
答案 1 :(得分:0)
键值为" post_get"而值是一个函数
JSON.stringify()
不包含引用功能的属性。 Object.keys()
会。它就这么简单。