이 문제는 연관 배열이 리터럴 정의를 통해 프로그래밍 방식으로 적용될 때만 발생합니다. 리터럴 정의에서 stringify를 사용하면 효과가 있습니다.JSON.stringify를 사용하여 연관 배열을 변환 할 때의 문제
이해하려고 시도한 결과 나는 리터럴 정의로 테스트하는 데 사용했습니다.
var test = {
voice : { state : 'Ready' }
};
console.log('Stringify test: ' + JSON.stringify(test));
는 출력 내가 기대 정확히 : 나는 프로그래밍 방식으로 초기화 할 때이 안될
Stringify test: {"voice":{"state":"Ready"}}
. 변수가 내가 만든 액터/getter 메서드가있는 개체의 private 멤버라는 것을 언급해야합니다. 생성자 내에는 다음과 같은 문자가 있습니다.
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() 서식을 지정하지 않습니다. 지금, 나는 약간 혼란스러워하고 있습니다. 당신이 당신의 customObj를 만드는 방법
오타를? 이 행은 잘못된'customObj.setState ('{state :'Ready '}', 'voice');'당신은 정말로 문자열을 원했습니까 ??? – epascarello
따옴표가 맞지 않아 해당 줄이 유효한 JS가 아니기 때문에 OP의 실제 코드가 아니어야합니다. – loganfsmyth
오타를 수정하면 실행됩니다. http://jsfiddle.net/Mn5gn/ – epascarello