programing

JavaScript - 정의되지 않은 속성을 설정할 수 없습니다.

codeshow 2023. 10. 14. 10:43
반응형

JavaScript - 정의되지 않은 속성을 설정할 수 없습니다.

내 코드:

var a = "1",
b = "hello",
c = { "100" : "some important data" },
d = {};

d[a]["greeting"] = b;
d[a]["data"] = c;

console.debug (d);

다음 오류가 발생합니다.

Uncatched TypeError: 정의되지 않은 속성 '그리팅'을 설정할 수 없습니다.

저는 연상배열과 비슷한 것을 하려고 합니다.왜 안 되는 거지?

당신은 절대 설정하지 않습니다.d[a]어떤 값을 치르더라도

이것 때문에.d[a]에 평가합니다.undefined, 그리고 당신은 그들의 정보를undefined.

추가하면d[a] = {}바로 뒤에d = {}일이 예상대로 되어야 합니다.

또는 개체 이니셜라이저를 사용할 수도 있습니다.

d[a] = {
    greetings: b,
    data: c
};

또는 모든 속성을 설정할 수 있습니다.d익명 함수 인스턴스의 경우:

d = new function () {
    this[a] = {
        greetings: b,
        data: c
    };
};

ES2015 기능을 지원하는 환경에 있는 경우 계산된 속성 이름을 사용할 수 있습니다.

d = {
  [a]: {
    greetings: b,
    data: c
  }
};

설정해야 합니다.d[a]연관 배열 또는 객체에 대해:

  • d[a] = [];
  • d[a] = {};

설정하지 않으면 다음과 같은 상황이 발생합니다.

d[a] == undefined, 그래서 당신이 하고 있는 겁니다.undefined['greeting']=b;정의상 미정의 속성은 없습니다.따라서 수신한 오류입니다.

다음 위치에 저장된 개체d[a]아무것도 설정하지 않았습니다.따라서,d[a]에 평가합니다.undefined. 에 속성을 할당할 수 없습니다.undefined:). 개체 또는 배열을 다음에 할당해야 합니다.d[a]:

d[a] = [];
d[a]["greeting"] = b;

console.debug(d);

ES6에서 스프레드 연산자를 사용할 수 있습니다.d[a]정의되지 않았습니다. 그냥 무시하지만 컨텐츠가 있으면 그대로 유지됩니다.

d[a] = { ...d[a], greeting: b, data: c };

승인된 답변은 다음의 내용을 덮어씁니다.d, 그건 우리가 항상 원하는 행동이 아닙니다

자바스크립트에서는 거의 모든 것이 물체입니다.null그리고.undefined예외입니다.

의 인스턴스(instance)Array는 개체입니다.배열의 속성을 설정할 수 있습니다. 같은 이유로 개체가 아니기 때문에 정의되지 않은 속성을 설정할 수 없습니다.

d[a]가 존재하는지 간단하게 확인하고 초기화하지 않으면...

var a = "1",
    b = "hello",
    c = { "100" : "some important data" },
    d = {};

    if (d[a] === undefined) {
        d[a] = {}
    };
    d[a]["greeting"] = b;
    d[a]["data"] = c;

    console.debug (d);

d = {}은(는) 지금 비어 있는 개체입니다.

그리고 d[a]도 빈 개체입니다.

키 값이 없습니다.따라서 여기에 대한 키 값을 초기화해야 합니다.

d[a] = {
greetings:'',
data:''
}

이 문제는 개체의 구조를 제대로 정의하지 않고 개체 속성에 값을 설정하기 때문에 발생합니다.

예: 다음 코드는 배열에 값을 할당하기 때문에 이러한 오류를 발생시킵니다.그럴 리가 없습니다.

let boatNames = [];
 boats.map(boat => {
    while( i < boats.length){
      boatNames[i].name = boat.boat.name;
      i++;
    }
  })

속성에 값을 설정하기 전에 작동하려면(boatNames[i].name = boat.boat.name;) 먼저 정의해야 합니다.이렇게...boatNames[i] = {};

언급URL : https://stackoverflow.com/questions/7479520/javascript-cannot-set-property-of-undefined

반응형