JavaScript의 모든 변수는 null과 정의되지 않은 두 가지 예외를 제외하고는 개체입니다.
false.toString() // ' false'
[1, 2, 3].toString(); // '1,2,3'
function Foo(){}
Foo.bar = 1;
푸.바 ; // 1
일반적인 오해는 숫자 리터럴이 객체가 아니라는 것입니다. 이는 도트 연산자를 부동 소수점 리터럴 값의 일부로 구문 분석하려고 시도하는 JavaScript 파서의 버그 때문입니다.
2.toString() // Error : 구문 오류
숫자 리터럴을 객체처럼 보이게 만드는 해결 방법은 다양합니다.
2..toString() // 두 번째 점 기호는 정상적으로 구문 분석될 수 있습니다
2 .toString(); // 점 기호 앞의 공백에 주의하세요
(2).toString() // 2가 먼저 계산됩니다
데이터 유형의 개체
JavaScript 객체는 해시 테이블로 사용될 수 있으며 주로 명명된 키와 값 사이의 해당 관계를 저장하는 데 사용됩니다.
객체 리터럴 구문({})을 사용하여 간단한 객체를 생성할 수 있습니다. 새로 생성된 이 객체는 Object.prototype에서 상속되며 사용자 정의 속성이 없습니다.
var foo = {}; 빈 객체
// 값이 12인 'test' 사용자 정의 속성이 있는 새 객체
var bar =
속성 액세스
객체의 속성에 액세스하는 방법에는 점 연산자 또는 대괄호 연산자 두 가지가 있습니다.
var foo = {name: 'kitten' }
foo.name; // 새끼 고양이
foo['name']; // 새끼 고양이
var get = 'name';
foo[get]; >
foo.1234; // SyntaxError
foo['1234']; // 작동합니다
두 구문은 동일하지만 대괄호 연산자는 다음 두 구문에서 계속 작동합니다. 유효한 경우 - 속성을 동적으로 설정함 - 속성 이름이 유효한 변수 이름이 아닙니다(번역자 참고 사항: 예를 들어 속성 이름에 공백이 포함되어 있거나 속성 이름이 JS 키워드인 경우)
번역자 참고 사항: JSLint 구문 감지 도구에서는 도트 연산자를 사용하는 것이 좋습니다.
속성 삭제
속성을 삭제하는 유일한 방법은 삭제 연산자를 사용하는 것입니다. 속성을 정의되지 않음 또는 null로 설정하면 실제로 속성이 삭제되지 않고 속성과 값 사이의 연결만 제거됩니다.
14
var obj = {
bar : 1,
foo: 2,
baz: 3
};
obj.bar = 정의되지 않음;
obj.foo = null;
delete obj.baz;
for(var i in obj) {
if (obj.hasOwnProperty(i)) {
console.log(i, '' obj[i]);
}
}
위 출력에는 bar undefine 및 foo null이 있습니다. baz만 실제로 삭제되므로 출력에서 사라집니다.
속성 이름 구문
var test = {
'case ': '나는 키워드이므로 문자열로 표기해야 합니다.',
delete: '나도 키워드입니다. 나' // 오류: SyntaxError
};
객체의 속성 이름은 문자열이나 일반 문자를 사용하여 선언할 수 있습니다. 그러나 JavaScript 파서의 또 다른 잘못된 설계로 인해 위의 두 번째 선언 방법은 ECMAScript 5 이전에 SyntaxError를 발생시킵니다.
이 오류가 발생하는 이유는 삭제가 JavaScript 언어의 키워드이기 때문입니다. 따라서 하위 버전의 JavaScript 엔진에서 정상적으로 실행하려면 문자열 리터럴 선언을 사용해야 합니다.