자바스크립트의 8가지 자료형
객체
{ ‘키(key): 값(value)’ 쌍으로 구성된 *프로퍼티(property)* 여러 개 }
파일 : 프로퍼티
파일 각각에 붙어있는 이름표 : 객체의 키
빈 객체 만들기
let user = new Object(); // '객체 생성자' 문법
let user = {}; // '객체 리터럴' 문법
let user = { // 객체
name: "John", // 키: "name", 값: "John"
age: 30 // 키: "age", 값: 30
};
"name"
(이름)과 "John"
(값)"age"
(이름)과 30
(값)프로퍼티 값 읽기
// 프로퍼티 값 얻기
alert( user.name ); // John
alert( user.age ); // 30
프로퍼티 추가
user.isAdmin = true;
여러 단어로 프로퍼티 이름을 만든 경우 : 프로퍼티 이름을 따옴표로 묶어줘야 함
let user = {
name: "John",
age: 30,
"likes birds": true // 복수의 단어는 따옴표로 묶어야 함
};
프로퍼티 삭제
delete user.age;
trailing, hanging 쉼표
→ 끝에 쉼표를 붙이면 모든 프로퍼티가 유사한 형태를 보이기 때문에 프로퍼티를 추가, 삭제, 이동하는 게 쉬워짐
let user = {
name: "John",
age: 30,
};
user.likes birds = true
→ 자바스크립트는 이 코드 이해 x
유효한 변수 식별자 → 점 사용 가능 (user.
likes…)
유효하지 않은 변수 식별자 → 대괄호 표기법
let user = {};
// set 추가
user["likes birds"] = true;
// get 읽기
alert(user["likes birds"]); // true
// delete 삭제
delete user["likes birds"];
let user = {
name: "John",
age: 30
};
let key = prompt("사용자의 어떤 정보를 얻고 싶으신가요?", "name"); //prompt(title, default)
// 변수로 접근
alert( user[key] ); // John (프롬프트 창에 "name"을 입력한 경우), 30 ("age를 입력했을 때")
계산된 프로퍼티 : 객체 리터럴 안의 프로퍼티 키가 대괄호로 둘러싸인 경우
ex)
let fruit = prompt("어떤 과일을 구매하시겠습니까?", "apple");
let bag = {
[fruit]: 5, // 변수 fruit에서 프로퍼티 이름을 동적으로 받아 옵니다.
};
alert( bag.apple ); // fruit에 "apple"이 할당되었다면, 5가 출력됩니다.
=
let fruit = prompt("어떤 과일을 구매하시겠습니까?", "apple"); //title : "어떤", default : "apple"
let bag = {};
bag[fruit] = 5; //파일 fruit 안의 key 5 -> bag에는 {apple : 5}가 할당
let fruit = 'apple'; //'apple' 이라는 문자열 할당
let bag = {
[fruit+ 'computers'] : 5 //bag.applecomputers = 5
};
alert(bag.applecomputers); //5
단축 프로퍼티 : 프로퍼티 값을 기존 변수에서 받아와 사용하는 경우
function makeUser(name, age) {
return{
name : name,
age: age,
};
};
let user = makeUser('승연', 20);
alert(user.name);
alert(user.age);
프로퍼티 값 단축 구문
function makeUser(name, age) {
return{
name, //name:name, 대신 사용
age,
}
}
한 객체에서 일반 프로퍼티와 단축 프로퍼티를 함께 사용하는 것도 가능
객체 프로퍼티에서는 변수 이름에 예약어 사용 가능 ex) for, let, return 등
let obj = {
for : 1,
let : 2,
return :3,
};
alert(obj.for + obj.let + obj.return); //6
let obj = {
0: 'test',
};
//숫자 0은 문자열 '0'으로 변환 -> 두 alert창은 같은 프로퍼티에 접근
alert(obj[0]); //test
alert(obj['0']); //test
proto : 특별 대우
let obj = {};
obj.__proto__ = 5;
alert(obj.__proto__); //[object Object] 출력 (숫자를 할당했으나 값은 객체가 됨)
자바스크립트는 존재하지 않는 프로퍼티에 접근 → 에러 X, undefined
반환
let obj = {};
obj.__proto__ = 5;
alert(obj.__proto__); //[object Object] 출력 (숫자를 할당했으나 값은 객체가 됨)
“key” in object
let user = {name:'Tiff', age : 30};
alert('age' in user); //true
alert('lalalalalalal' in user); //당연히 없겠지 false
let user = { age :30};
let key = 'age';
alert(key in user); //있으니까 true
가끔 값을 undefined
와 비교해서 실패할 때도 있기 때문에 이 방법 사용
for … in
: 객체의 모든 키 순회
for (key in object) { 각 프로퍼티 키를 이용해 본문을 실행}
let user = {
name : 'Tiff',
age : 20,
isAdmin : true,
};
for (let key in user){
alert(key);
alert(user[key]);
//name Tiff age 20 isAdmin True 이 순서로 나옴
}
key : 정수
자동정렬
let codes = {
'49': '독일',
'41': '스위스',
'1': '미국',
'82': '한국',
}
for (let code in codes){
alert(code);
};
미국 (1) 스위스(41) 독일 (49) 한국 (82) 순으로 출력 ⇒ 각 나라 번호 앞에 +
붙여서 해결
key : 정수가 아닐 때
입력한 순서대로 출력