developer tip

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

copycodes 2020. 8. 25. 08:16
반응형

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


내 코드 :

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

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

console.debug (d);

다음과 같은 오류가 발생합니다.

Uncaught TypeError : 정의되지 않은 'greeting'속성을 설정할 수 없습니다.

연관 배열과 비슷한 것을 시도하고 있습니다. 왜 이것이 작동하지 않습니까?


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;정의에 따라 undefined에는 속성이 없습니다. 따라서받은 오류입니다.


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

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

console.debug(d);

자바 스크립트에서 거의 모든 객체이며, nullundefined예외입니다.

의 인스턴스 Array는 개체입니다. 정의되지 않은, 때문에의이 같은 이유로, 배열의 속성을 설정할 수 있도록, 당신이 할 수없는 일련의 특성 NOT 객체


나는 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);

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

반응형