2013-05-09 2 views
0

이 문제는 연관 배열이 리터럴 정의를 통해 프로그래밍 방식으로 적용될 때만 발생합니다. 리터럴 정의에서 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를 만드는 방법

+2

오타를? 이 행은 잘못된'customObj.setState ('{state :'Ready '}', 'voice');'당신은 정말로 문자열을 원했습니까 ??? – epascarello

+0

따옴표가 맞지 않아 해당 줄이 유효한 JS가 아니기 때문에 OP의 실제 코드가 아니어야합니다. – loganfsmyth

+1

오타를 수정하면 실행됩니다. http://jsfiddle.net/Mn5gn/ – epascarello

답변

2

나는 확실하지 오전하지만 다음 작품 :

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"}} 
관련 문제