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
'programing' 카테고리의 다른 글
32 대 64 플랫폼 크기의 printf: 플랫폼 독립적인 방식으로 포맷 코드를 처리하려면 어떻게 해야 합니까? (0) | 2023.10.14 |
---|---|
InnerBlocks 속성을 가져와 상위 블록에 저장 (0) | 2023.10.14 |
Golang, mysql: 오류 1040:연결이 너무 많음 (0) | 2023.10.09 |
셰이프 파일(.shp)을 xml/json으로 변환 (0) | 2023.10.09 |
Swift에서 계산된 읽기 전용 속성 vs 함수 (0) | 2023.10.09 |