아래에서이 두 로그의 출력을 볼 수 있습니다. 첫 번째는 액세스하려는 속성이있는 전체 객체를 명확하게 보여 주지만 다음 코드 줄에서는 액세스 할 수 없습니다 config.col_id_3
(스크린 샷의 “정의되지 않음”을 참조하십시오). 누구든지 이것을 설명 할 수 있습니까? 나는 이외의 다른 모든 재산에 접근 할 수 있습니다 field_id_4
.
console.log(config);
console.log(config.col_id_3);
이것이 콘솔 에서이 줄을 인쇄하는 것입니다.
답변
의 결과 console.log(anObject)
는 잘못된 것입니다. 표시된 개체의 상태 >
는 콘솔에서 콘솔 을 확장 할 때만 해결됩니다 . 객체를 객체로 만들 때의 객체 상태 가 아닙니다console.log
.
대신 console.log(Object.keys(config))
또는을 시도 console.log(JSON.stringify(config))
하면 호출 할 때 키 또는 객체의 상태가 표시 console.log
됩니다.
당신은 (보통) 키가 추가되고있다 찾을 후 귀하의 console.log
전화.
답변
Mongoose를 사용하여 MongoDB에서로드 된 문서 에서이 문제가 발생했습니다 .
console.log()
전체 객체에서 실행될 때 모든 문서 필드 (db에 저장된)가 나타납니다. 그러나 일부 개인 자산 접근 undefined
자는을 (를 포함하여 _id
) 다른 사람이 제대로 작동 하면을 반환 합니다.
속성 접근이 만 내에서 지정된 필드 작동 밝혀졌다 mongoose.Schema(...)
반면 정의, console.log()
그리고 JSON.stringify()
모든 필드가 DB에 저장된 돌아갑니다.
솔루션 (Mongoose를 사용하는 경우) : 모든 DB 필드가에 정의되어 있는지 확인하십시오 mongoose.Schema(...)
.
답변
객체 내부에 객체 배열이 있는지 확인하십시오. JSON과 비슷한 문제가있었습니다.
"terms": {
"category": [
{
"ID": 4,
"name": "Cirugia",
"slug": "cirugia",
"description": "",
"taxonomy": "category",
"parent": null,
"count": 68,
"link": "http://distritocuatro.mx/enarm/category/cirugia/"
}
]
}
‘category’에서 ‘name’키에 액세스하려고했는데 다음을 사용하고 있기 때문에 정의되지 않은 오류가 발생했습니다.
var_name = obj_array.terms.category.name
그런 다음 대괄호가 있음을 깨달았습니다. 즉, 카테고리 키 안에 객체 배열이 있음을 의미합니다. 하나 이상의 카테고리 객체를 가질 수 있기 때문입니다. 따라서 ‘name’키를 얻으려면 이것을 사용했습니다.
var_name = obj_array.terms.category[0].name
그리고 그 트릭을 수행합니다.
어쩌면이 답변에 너무 늦었을 수도 있지만 같은 문제가있는 사람이 해결책을 찾기 전에 내가했던 것처럼 이것을 찾을 수 있기를 바랍니다. 🙂
답변
나는 같은 문제가 있었다. 나를위한 솔루션은 JSON을 구문 분석하기위한 문자열 출력을 입력으로 사용하고있었습니다. 이것은 나를 위해 일했습니다. 그게 당신에게 유용한 희망
var x =JSON.parse(JSON.stringify(obj));
console.log(x.property_actually_now_defined);
답변
액세스하려는 속성이 아직 존재하지 않을 수 있습니다. Console.log는 약간의 지연 후에 실행되기 때문에 작동하지만 나머지 코드에는 해당되지 않습니다. 이 시도:
var a = config.col_id_3; //undefined
setTimeout(function()
{
var a = config.col_id_3; //voila!
}, 100);
답변
내 경우에는 약속에 객체를 전달하고 약속 내에서 객체에 더 많은 키 / 값을 추가하고 약속이 객체를 반환했습니다.
그러나 내 부분을 조금만 살펴보면 약속이 완전히 완료되기 전에 객체를 반환하는 것입니다 … 따라서 나머지 코드는 업데이트 된 객체를 처리하려고 시도했지만 데이터가 아직 없었습니다. 그러나 위와 같이 콘솔에서 객체가 완전히 업데이트되었지만 키에 액세스 할 수 없었습니다. 정의되지 않은 상태로 돌아 왔습니다. 내가 이것을 볼 때까지 :
console.log(obj) ;
console.log(obj.newKey1) ;
// returned in console
> Object { origKey1: "blah", origKey2: "blah blah"} [i]
origKey1: "blah"
origKey2: "blah blah"
newKey1: "this info"
newKey2: "that info"
newKey3: " more info"
> *undefined*
[i]는 작은 아이콘으로, 위에 마우스를 올리면이라고 말했습니다 Object value at left was snapshotted when logged, value below was evaluated just now
. 약속이 그것을 완전히 업데이트하기 전에 내 객체가 평가되고있는 것이 나에게 일어난 일입니다.
답변
오늘이 문제로 어려움을 겪고 솔루션에 대한 답변을 남기겠다고 생각했습니다.
나는 아약스를 통해 데이터 객체를 가져오고 있었다.
{"constants": {"value1":"x","value2":"y"},"i18n" {"data1":"x", "data2":"y"}}
이 객체가 data라는 변수에 있다고 가정 해 봅시다. 내가 참조 할 때마다 나는 data.i18n
얻었다 undefined
.
console.log(data)
예상대로 물건을 보여console.log(Object.keys(data))
["constants","i18n"]
예상대로 말했다- 이름 바꾸기 국제화를 에 간 것은 아무것도 변경하지 않았다
- “i18n”을 첫 번째 객체로 만들기 위해 데이터를 전환하려고했습니다.
- 객체가 완전히 설정되었으며 아약스 약속에 아무런 문제가 없도록 절대 코드를 이동했습니다.
아무것도 도움이되지 못했습니다 … 그런 다음 서버 측에서 데이터를 PHP 로그에 기록하고 다음을 공개했습니다.
{"constants": {"value1":"x","value2":"y"},"\u045618n" {"data1":"x", "data2":"y"}}
인덱스 키의 “i”는 실제로 u0456 (키릴 i)입니다. 내 PHP 편집기 또는 브라우저 콘솔 로그에 표시되지 않았습니다. PHP 로그만이 이것을 공개했습니다 … 그것은 까다로운 것입니다 …