let
은 하나의 값만 저장이 가능함. 다양한 값들을 함께 저장할 때는 객체를 사용한다.
let test = {
propertyName1(문자열): property value1(모든 자료형),
propertyName2: property value2(value 안에 다시 객체를 넣을 수도 있음),
값이름(key)3: 값3(value),
값이름(key)4: 값4(value),
}
// key 어차피 문자열이라 따옴표로 안감싸줘도 형변환시켜줌
// 그래서 보통 생략하는 편
점 표기법
console.log(test.propertyName2);
→ property value2 가 출력됨
대괄호 표기법
console.log(test['propertyName2']);
→ key값에 따옴표를 생략할 수 없을 때 사용함
객체 안에 또 객체가 있다면?
console.log(test.first_object_propertyName['second-object-propertyName']);
→ 점 표기법이나 대괄호 표기법을 사용해서 계속 이어줄 것
만약 존재하지 않는 프로퍼티에 접근하려고 했다면?
→ 빈 값이기 때문에 undefined
출력 됨
프로퍼티 value 수정하기
test.propertyName1 = 'amend value'
프로퍼티 추가하기
test.propertyName5 = 'add new value'
프로퍼티 삭제하기
delete test.propertyName5;
프로퍼티 존재 여부 확인하기
console.log(test.propertyName1 !== undefined);
console.log('propertyName1' in test);
연관된 여러 함수들을 하나로 묶고 싶을 때 사용.
let greetings = {
sayHello: function(name) {
console.log(`Hello ${name}!`);
}
sayHi: function(name) {
console.log(`Hi ${name}!`);
}
sayBye: function() {
console.log(`Bye~~`);
}
};
사용할 때도 객체와 똑같이 greetings.sayHello(’다은’);
console.log(’다은’);
와 똑같은 문법인 이유는 사실 console.log
도 메소드 중 하나이기 때문임.
console
이라는 객체에 log
라는 메소드.
따라서 console.['log'](’다은’);
이렇게 해도 실행이 됨.
객체를 다루는 for 문
for (변수 in 객체) {
동작부분;
}
for (let key in test) {
console.log(key);
console.log(test[key]);
}
// test 라는 객체의 프로퍼티 개수만큼 반복함.
// key 라는 변수에 이 test 객체의 프로퍼티 네임들이 차례대로 전달됨
🥲 변수 지정할 때 let 쓰는 거 까먹지 말기…
console 처럼, 자바 스크립트가 미리 가지고 있는 내장 객체(Standard built-in objects)들이 있음. Date 객체도 그 중 하나!
// Date
let myDate = new Date();
console.log(myDate);
// myDate 변수를 생성한 순간의 시간이 출력됨.
---다양한 값 지정---
let myDate = new Date(1000);
// 현재 시간 +1000밀리초 (= 1초)
let myDate = new Date('2000-06-17');
// 날짜 지정 + 자정 기준
let myDate = new Date('2000-06-17T16:30:05');
// 날짜, 시간 지정
let myDate = new Date(2000, 5, 17, 16, 30, 5);
// 년, 월 까지만 필수. 나머지는 안쓰면 0 처리됨.
// 여기서 month는 0부터 시작함, 즉, 6월 쓰려면 5로 써야함
-------
console.log(myDate.getTime());
// 타임스탬프를 알려줌
getFullYear()
getMonth() myDate의 달
getDate() myDate의 일
getDay()//요일, 0부터 6까지
getHours() myDate의 시간 ...
getMinutes()
getSeconds()
getMilliseconds()
getTime() 타임스탬프
수정은 이렇게!
setFullYear(year, [month], [date])
setMonth(month, [date])
setDate(date)
setHours(hour, [min], [sec], [ms])
setMinutes(min, [sec], [ms])
setSeconds(sec, [ms])
setMilliseconds(ms)
setTime(milliseconds)(1970년 1월 1일 00:00:0...
간단하게 나타내기
console.log(myDate.toLocaleDateString());
// myDate가 가진 날짜에 대한 정보 (년. 월. 일)
console.log(myDate.toLocaleTimeString());
// myDate가 가진 시간에 대한 정보 (시:분:초)
console.log(myDate.toLocaleString());
// myDate가 가진 날짜와 시간에 대한 정보 (년. 월. 일 시:분:초)
이 메소드가 호출된 시점의 타임스탬프를 반환
Date.now()
날짜 간 차이
let timeDiff = myDate2 - myDate1;
console.log(timeDiff); // 86400000 (ms)
console.log(timeDiff / 1000); // 86400 (sec)
console.log(timeDiff / 1000 / 60) // 1440 (min)
console.log(timeDiff / 1000 / 60 / 60) // 24 (hour)
console.log(timeDiff / 1000 / 60 / 60 / 24) // 1 (date)
Date를 변수에 지정할 때는 항상 new 연산자와 함께 ..!
let courseRanking = [
'1단원',
'2단원',
'3단원',
'요약하기',
'해설지'
]
let fruits = ['사과', '바나나', '딸기', '무화과']
courseRanking[3]
courseRanking.length
: 배열 안에 몇 개의 요소가 있는지 알려줌.courseRanking[courseRanking.length - 1]
: 배열의 마지막 요소에 접근 가능courseRanking[5] = ‘만든 이’
: 5번 인덱스에 새로운 값 할당 or 이미 있는 값 수정.courseRanking.length
도 10임.delete courseRanking[5]
: ‘empty’로 계속 존재하게 됨.courseRanking.splice(5)
splice(n)
: n번 인덱스 이후 모든 요소들이 삭제됨.splice(n1, n2)
: n1번 인덱스 이후로 n2개 요소 삭제.splice(n1, n2, item)
: 요소 삭제 후 그 자리에 요소 추가splice(1, 1, '김', '다', '은')
: 1번 인덱스에 있는 요소 1개 삭제 후 3개의 요소가 그 중간에 들어가게 됨. 즉, 그 뒤 부분들은 순서가 2개씩 밀림splice(0, 0, '김', '다', '은')
: 요소 삭제 없이 0~2번 인덱스 자리로 값 추가함shift()
courseRanking.shift();
pop()
courseRanking.pop();
unshift(value);
courseRanking.unshift('이현지');
push(value);
courseRanking.push('유무');
indexOf / lastIndexOf
courseRanking.indexOf(’이현지’)
item
이 있는 인덱스가 리턴됨-1
이 리턴됨.lastIndexOf
는 마지막 인덱스부터 검사함includes
courseRanking.includes(’이현지’)
reverse
courseRanking.reverse();
for (변수 of 배열) {
동작부분;
}
for (let element of influenser) {
console.log(element);
}
//for문이라면?
for (let i = 0; i < influenser.length; i++) {
console.log(influenser[i]);
}
//for in 문으로는 이렇게 씀 -> for in 문 배열에 쓰지 말 것. 결과 이상하게 나올 수 있음
for (let index in influenser) {
console.log(influenser[index]);
}
influenser[0][3] → 이런 식으로 적으면 됨.
let myNumber = 255;
myNumber.toFixed(7)
Number(myNumber.toFixed(7))
or +myNumber.toFixed(7)
로 작성해야 숫자형으로 변환됨 ( +
← number 함수랑 같은 역할)myNumber.toString(16)
숫자에 바로 메소드를 사용하고 싶다면?
3.12.toFixed(7)
→ 소수312..toFixed(7)
→ 정수는 점 2개(하나 찍으면 소수점으로 인식)(312).toFixed(7)
→ 혹은 괄호 사용절대값:
Math.abs(x)
를 하면 x
의 절댓값이 리턴
최대값:
Math..max(2, -1, 4, 5, 0)
함수에 파라미터로 여러 수를 넘겨주면, 그중 가장 큰 값이 리턴
최솟값:
Math.min(2, -1, 4, 5, 0)
함수에 파라미터로 여러 수를 넘겨주면, 그중 가장 작은 값이 리턴
**거듭제곱:**
Math.pow(x, y)
를 하면 x
의 y
승의 결괏값이 리턴
**제곱근:**
Math.sqrt(x)
를 하면 x
의 제곱근이 리턴
**반올림:**
Math.round(x)
를 하면 x
의 반올림된 값이 리턴
**버림과 올림 (Floor and Ceil):**
Math.floor(x)
을 하면 x
의 버림 값이, Math.ceil(x)
을 하면 x
의 올림 값이 리턴
**난수:**
Math.random
을 하면 0 이상 1 미만의 값이 랜덤으로 리턴
let myString = ' Hi~~';
// 문자열 길이
console.log(myString.length);
공백을 포함해서 글자 하나하나의 길이를 출력함.
// 요소 접근
console.log(myString[3]); // 대괄호 표기법
console.log(myString.charAt(3)); // charAt 메소드
// 요소 탐색
console.log(myString.indexOf('i'));
console.log(myString.lastIndexOf('i'));
// 대소문자 변환
console.log(myString.toUpperCase()); // 대문자
console.log(myString.toLowerCase()); // 소문자
// 양 쪽 공백 제거
console.log(myString.trim());
// 부분 문자열 접근 slice(start, end)
console.log(myString.slice(0, 2));
// 끝 인덱스 바로 직전까지의 범위를 가져옴. 즉, 0과 1인덱스
console.log(myString.slice(3));
// 3번부터 끝까지 리턴
console.log(myString.slice());
// 문자열 전체를 가져옴
기본형: Number, String, Boolean, Null, Undefined
참조형: Object(객체) (array도 포함)
myArray2 = myArray.slice();
// 문자열 전체를 가져옴
myObject2 = Object.assign{}, myObject;
// 문자열 전체를 가져옴
//or
myObject2 = {};
for (let key in myObject1) {
myObject2[key] = myObject1[key];
}
//or
function cloneObject(object) {
let temp = {};
for (let key in object) {
temp[key] = object[key];
}
return temp;
}
// 이렇게 함수로 만들어놓으면 계속 쓸 수 있음
📢 주의할 점: 객체 안에 배열이 또 있으면 해당 객체 안에 있는 배열에 새로운 값을 수정할 때 그 주소값이 복사될 수 있음.
const x
가 참조형(객체)이라면?
x.add = 2032;
이 작동한다. 객체는 변수의 주소값이 저장되는 것이기 때문에 할당연산자로 값을 변경하더라도 값을 재할당하는 것이 아니라 프로퍼티가 변경되는 것. 객체의 프로퍼티나 배열의 요소들이 변경되는 경우는 변수가 가진 주소값이 변경하는 것이 아니기 때문에 변경이 가능하다.