仅当关联数组通过文字定义以编程方式附加时才会出现此问题。在文字定义上使用stringify可以正常工作。
试图理解,我用它来测试文字定义。
var test = {
voice : { state : 'Ready' }
};
console.log('Stringify test: ' + JSON.stringify(test));
输出正是我所期望的:
Stringify test: {"voice":{"state":"Ready"}}
当我以编程方式初始化它时,不会发生这种情况。我应该提到变量是我创建的对象的私有成员,它具有访问器/ getter方法。在构造函数中,我有:
var states = {};
this.getStates = function()
{
return states;
}
this.setState = function(newState, mediaType)
{
states[mediaType] = newState
}
现在我运行相同的测试。
customObj.setState('{ state: 'Ready' }', 'voice');
var test = customObj.getStates();
console.log('Stringify test: ' + JSON.stringify(test));
输出不是我所期望的:
Stringify Test: []
最后,我仔细检查测试变量的含义:
for(var x in test)
{
console.log('State in test: ' + x);
console.log('Value of ' + x + ': ' + JSON.stringify(test[x]));
}
然后我得到了:
State in test: voice
Value of voice: {"state":"Ready"}
好的,所以告诉我它包含了我所期待的内容,但是stringify()不会格式化它。 现在,我对发生的事情感到有些困惑。
答案 0 :(得分:2)
我不确定您是如何创建customObj的,但以下是有效的:
var CustomObj = function () {
var states = {};
this.getStates = function()
{
return states;
}
this.setState = function(newState, mediaType)
{
states[mediaType] = newState
}
};
var customObj = new CustomObj();
customObj.setState({ state: 'Ready' }, 'voice');
var test = customObj.getStates();
console.log('Stringify test: ' + JSON.stringify(test));
输出:
Stringify test: {"voice":{"state":"Ready"}}