[javascript] 콘솔 로그에 표시 되어도 개체 속성에 액세스 할 수 없습니다

아래에서이 두 로그의 출력을 볼 수 있습니다. 첫 번째는 액세스하려는 속성이있는 전체 객체를 명확하게 보여 주지만 다음 코드 줄에서는 액세스 할 수 없습니다 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.

  1. console.log(data) 예상대로 물건을 보여
  2. console.log(Object.keys(data))["constants","i18n"]예상대로 말했다
  3. 이름 바꾸기 국제화를간 것은 아무것도 변경하지 않았다
  4. “i18n”을 첫 번째 객체로 만들기 위해 데이터를 전환하려고했습니다.
  5. 객체가 완전히 설정되었으며 아약스 약속에 아무런 문제가 없도록 절대 코드를 이동했습니다.

아무것도 도움이되지 못했습니다 … 그런 다음 서버 측에서 데이터를 PHP 로그에 기록하고 다음을 공개했습니다.

{"constants": {"value1":"x","value2":"y"},"\u045618n" {"data1":"x", "data2":"y"}}

인덱스 키의 “i”는 실제로 u0456 (키릴 i)입니다. 내 PHP 편집기 또는 브라우저 콘솔 로그에 표시되지 않았습니다. PHP 로그만이 이것을 공개했습니다 … 그것은 까다로운 것입니다 …