false.toString(); // 'false' [1, 2, 3].toString(); // '1,2,3' function Foo(){} Foo.bar = 1; Foo.bar; // 1
자주 오해되는 점은 숫자 상수는 객체로 간주될 수 없다는 것입니다. 실제로 숫자 상수는 여전히 객체로 간주될 수 있습니다. 이는 자바스크립트 파서가 도트 연산자를 파싱할 때 이를 부동 소수점 특성으로 취급하는 실수를 하기 때문입니다.
2.toString(); // SyntaxError 발생
실제로 숫자 상수를 객체처럼 동작하게 만드는 방법은 많습니다.
2..toString(); // the second point is correctly recognized 2 .toString(); // note the space left to the dot (2).toString(); // 2 is evaluated first
데이터 유형의 개체
Javascript의 객체는 주로 키와 값 간의 대응을 포함하는 해시 테이블로 사용될 수 있습니다.
간단한 객체를 생성하려면 {} 기호를 사용하세요. 이 새 객체는 Object.prototype에서 상속되며 자체 속성을 포함하지 않습니다.
var foo = {}; // a new empty object // a new object with a 'test' property with value 12 var bar = {test: 12};
객체 속성에 액세스
Javascript 객체에 액세스하는 데에는 점 연산자와 대괄호 연산자 []라는 두 가지 방법을 사용할 수 있습니다.
var foo = {name: 'kitten'} foo.name; // kitten foo['name']; // kitten var get = 'name'; foo[get]; // kitten foo.1234; // SyntaxError foo['1234']; // works
두 연산자의 효과는 거의 동일합니다. 유일한 차이점은 대괄호 연산자를 사용하면 속성을 동적으로 설정할 수 있으며 속성 이름에 구문 오류가 있을 수 있다는 것입니다. (위 예시에서는 세 번째 상황을 설명했습니다.)
개체 속성 삭제
속성을 삭제하는 유일한 방법은 삭제를 사용하는 것입니다. 속성 값을 정의되지 않음 또는 null로 설정하면 속성과 연결된 값만 제거되고 실제로 속성 자체는 삭제되지 않습니다.
var obj = { bar: 1, foo: 2, baz: 3 }; obj.bar = undefined; 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 키워드를 사용하여 변수를 선언해야 합니다. var를 작성하지 않으면 변수가 전역 개체에 대해 생성된 새 속성으로 잘못 인식되기 때문입니다.
이 예는 아주 명확하게 대답을 제공합니다. a는 변수이고 b는 전역 객체의 속성일 뿐입니다.
이름이 지정된 개체의 속성
var test = { 'case': 'I am a keyword, so I must be notated as a string', delete: 'I am a keyword, so me too' // raises SyntaxError };
객체 속성의 이름은 일반 문자나 문자열을 사용하여 지정할 수 있습니다. 또한 Javascript 파서 설계의 버그로 인해 위 예제의 두 번째 표현은 ECMAScript 5에서 오류를 발생시킵니다.
오류가 발생하는 이유는 delete가 키워드이기 때문에 이전 버전의 Javascript 파서에 맞게 문자열 상수를 사용하여 이름을 지정해야 하기 때문입니다.