Javascript 자바스크립트 데이터 개념정리
by 효기’s
객체와 프로퍼티
객체 (object) : 여러 가지 값을 한번에 저장한다.
▶ name: 'hyogi' → 속성 (Property)
property name → name (문자열 string)
property Value → 'hyogi'
▶Property Name 주의 사항
1. 첫 번째 글자는 반드시 문자, 밑줄( _ ), 달러 기호($) 중 하나로 시작
2. 띄어쓰기 금지
3. 하이픈(-) 금지
→ property name에 따옴표 ( ' ) 를 추가하면 숫자도 사용가능 ex) '1stHyogi'
▶Property Value
1. 모든 자료형 사용가능
2. 객제 안에 객체를 넣을 수 있다.
// 객체(Object)
let hyogi = {
name : 'hyogi', // name은 key, 'hyogi'는 value(값)
year: '25',
'mybirth year': 1999,
GoodJoob: 'false',
SoSo: 'null',
greatCourse: { // 객체 안에 객체
title: 'hello World',
language: 'Python'
}
}
객체에서 데이터 접근
// 점 표기법 (ObjectName.propertyName)
console.log(hyogi.name); // hyogi
console.log(mybirth year); // 불가능 x
console.log(hyogi.greatCourse.title); // hello World
// 대괄호 표기법 (ObjectName['propertyName'])
console.log(hyogi['mybirth year']); // 1999
console.log(hyogi['mybirth' + 'year']); // 1999
console.log(hyogi.greatCourse['title']); // hello World
let propertyName = 'hyogi';
console.log(hyogi[propertyName]); // hyogi
// 존재하지 않는 property에 접근하면 undefined처리가 됨. (오류 x)
객체 다루기
객체의 프로퍼티 수정방법 (변수의 값을 재할당 방법과 유사)
// 객체(Object)
let hyogi = {
name : 'hyogi', // name은 key, 'hyogi'는 value(값)
year: '25',
'mybirth year': 1999,
GoodJoob: 'false',
SoSo: 'null',
greatCourse: {
title: 'hello World',
language: 'Python'
}
}
// 객체의 프로퍼티 수정방법 (변수의 값을 재할당 방법과 유사)
console.log(hyogi.name); // 수정전 : hyogi
hyogi.name = '효기';
console.log(hyogi.name); // 수정후 : 효기
// 객체의 프로퍼티 추가방법
console.log(hyogi.study); // 객체에 존재하지 않는 프로퍼티 undefined 출력
hyogi.study = 'javascript';
console.log(hyogi.study); // javascript
// 객체의 프로퍼티 삭제방법
console.log(hyogi.greatCourse); // { title: 'hello World', language: 'Python' }
delete hyogi.greatCourse;
console.log(hyogi.greatCourse); // undefined
// in 연산자 (안전하게 프로퍼티 유무 확인하려면 in 연산자 사용)
console.log(hyogi.name !== undefined); // 객체에 프로퍼티 존재 유무 확인 true
console.log('name' in hyogi); // true
if('year' in hyogi){ // hyogi 객체 안에 'year 프로퍼티 존재 유무 확인
console.log('ok'); // ok
} else {
console.log('not ok');
}
객체와 메소드
메소드 : 객체의 고유한 동작으로써 함수의 의미를 부여할 수 있다.
// 메소드 (Method)
let hyogi = {
sayA: function (name) {
console.log(`A ${name}!`);
},
sayB: function () {
console.log('B');
},
sayC: function () {
console.log('C');
}
};
hyogi.sayA('hyogi'); // A hyogi!
hyogi.sayB(); // B
hyogi['sayA']('hyogi'); // A hyogi!
for..in 반복문
객체의 프로퍼티를 가지고 반복적인 동작을 한다.
▶주의사항
1. 숫자형 (양수) 프러퍼티 네임
숫자형key값은 문자열(string)이며 대괄호 표기법으로만 접근이 가능하다.
2. 정수형 프로퍼티 네임
정수형 네임을 오름차순으로 먼저 정렬하고 추가 순서대로 정렬하는 특징이 있다.
let hyogi = {
name : 'hyogi', // name은 key, 'hyogi'는 value(값)
year: '25',
'mybirth year': 1999,
GoodJoob: 'false',
SoSo: 'null',
greatCourse: {
title: 'hello World',
language: 'Python'
}
}
for (let key in hyogi){
console.log(key);
}
/*
출력결과
name
year
mybirth year
GoodJoob
SoSo
greatCourse
*/
for (let key in hyogi){
console.log(hyogi[key]);
}
/*
출력결과
name
hyogi
year
25
mybirth year
1999
GoodJoob
false
SoSo
null
greatCourse
{ title: 'hello World', language: 'Python' }
*/
Date 객체
▶ month는 0부터 시작
▶틀린 Date객체의 날짜를 수정하면 자동으로 날짜 수정
▶Date.new() 메소드는 이 메소드가 호출된 시점 타임스템프를 반환한다.
// Date
let my1Date = new Date();
console.log(my1Date); // 2023-03-22T02:58:35.881Z (오늘시간 출력)
//1970년 1월 1일 00:00:00 UTC + 1000밀리초
let my2Date = new Date(1000);
console.log(my2Date); // 1970-01-01T00:00:01.000Z
// 문자열로 시간을 할당
let my3Date = new Date('2023-03-22');
console.log(my3Date); // 2023-03-22T00:00:00.000Z
// 시간 분 초까지 할당
my3Date = new Date('2023-03-22T09:11:12');
console.log(my3Date); // 2023-03-22T00:11:12.000Z
// 소괄호 안에 여러 값을 할당 (month는 0부터 시작)
let my5Date = new Date(1999, 08, 06, 12, 11, 50, 12); // yyyy, MM, DD, hh, mm, ss, ms
console.log(my5Date); // 1999-09-06T03:11:50.012Z
// Date.getTime() → 몇밀리초가 지났는지 계산
let my6Date = new Date(1999, 08, 06, 12, 11, 50, 12); // 1970년 1월 1일 00:00:00 UTC 부터 몇 밀리초가 지났는지
console.log(my6Date.getTime()); // 936587510012 (타임스탬프)
// 지금으로부터 몇 밀리초, 초, 분, 시간이 차이나는지 계산
let today = new Date(); // 오늘 시간 출력
let timeDiff = my6Date.getTime() - today.getTime();
console.log(timeDiff + '밀리초'); // -742867634694밀리초
console.log(timeDiff / 1000 + '초'); // -742867712.473초
console.log(timeDiff / 1000 / 60 + '분'); // -12381128.541216668분
console.log(timeDiff / 1000 / 60 / 60 + '시간'); // -206352.14235361113시간
let my7Date = new Date(2014, 6, 12, 13, 17, 15);
console.log(my7Date.getFullYear()); // 2014
console.log(my7Date.getMonth()); // 6 (0부터 시작)
console.log(my7Date.getDate()); // 12 (일)
console.log(my7Date.getDay()); // 6 (요일)
console.log(my7Date.getHours()); // 13
console.log(my7Date.getMinutes()); // 17
console.log(my7Date.getSeconds()); // 15
console.log(my7Date.getMilliseconds()); // 0
// set 으로 생성된 Date 객체 정보 수정
my7Date.setFullYear(1999);
my7Date.setMonth(2);
my7Date.setDate(30);
console.log(my7Date); // 1999-03-30T04:17:15.000Z (변경 값)
// 브라우저에 설정된 국가 표기에 맞춰 날짜와 시간을 보여줌
let myDate = new Date();
console.log(myDate.toLocaleDateString()); // 2023. 3. 22. (년. 월. 일)
console.log(myDate.toLocaleTimeString()); // 오후 12:30:19 (시:분:초)
console.log(myDate.toLocaleString()); // 2023. 3. 22. 오후 12:30:19 (년. 월. 일 시:분:초)
// Date객체의 형변환
console.log(typeof myDate); // object
console.log(Boolean(myDate)); // true
console.log(Number(myDate)); // 1679456110776 (타임스탬프 값)
// 두 객체 사이의 시간차이 확인도 가능
let myDate1 = new Date(1999, 8, 6);
let myDate2 = new Date(2023, 3, 22);
let timeDiff2 = myDate2 - myDate1;
console.log(timeDiff2); // 745545600000 (ms)
console.log(timeDiff2 / 1000); // 745545600 (sec)
console.log(timeDiff2 / 1000 / 60) // 12425760 (min)
console.log(timeDiff2 / 1000 / 60 / 60) // 207096 (hour)
console.log(timeDiff2 / 1000 / 60 / 60 / 24) // 8629 (date)
// 날짜를 표현하는 다양한 문자열
let date1 = new Date('8/6/1999 06:00:00');
let date2 = new Date('August 6, 1999 06:00:00');
let date3 = new Date('Aug 6 1999 06:00:00');
console.log(date1, date2, date3); // 1999-08-05T21:00:00.000Z * 3
배열 (Array)
랭킹처럼 순서가 있는 값을 만들때는 객체보다 배열을 활용하는것이 좋다.
▶배열은 객체다.
▶배열은 바뀔 수 있는 자료형, 문자열은 바뀔 수 없는 자료형
// 배열 (Array)
let foodRanking = [
'짜장면', // 요소
'짬뽕',
'돼지국밥',
'한우'
];
// 인댁스 == 프로퍼티 이름
console.log(foodRanking[0]); // 인덱싱(Indexing) // 출력 : 짜장면
console.log(foodRanking[1 + 2]); // 한우
console.log(foodRanking.length); // 4 (배열의 요소 총개수)
console.log(foodRanking['length']); // 4 (배열의 요소 총개수)
console.log(foodRanking[foodRanking.length - 1]); // 한우 (배열의 마지막 요소)
console.log(foodRanking[5]); // undefined
foodRanking[5] = '순대국'; // 요소 값 수정
console.log(foodRanking[5]); // 순대국
foodRanking[7] = '카레';
console.log(foodRanking[6]); // 6번이 empty로 비어있음
foodRanking[2] = '초밥';
console.log(foodRanking[2]); // 돼지국밥에서 초밥으로 수정(덮어쓰기)
console.log(foodRanking); // [ '짜장면', '짬뽕', '초밥', '한우', <1 empty item>, '순대국', <1 empty item>, '카레' ]
delete foodRanking[3]; // 배열 삭제
console.log(foodRanking); // [ '짜장면', '짬뽕', '초밥', <2 empty items>, '순대국', <1 empty item>, '카레' ]
배열의 메소드
splice : 할당된 숫자 이후부터의 배열의 값을 완벽하게 삭제
// 배열 (Array)
let foodRanking = [
'짜장면', // 요소
'짬뽕',
'돼지국밥',
'한우'
];
// splice (할당된 숫자 이후부터의 배열의 값을 완벽하게 삭제)
foodRanking.splice(2);
console.log(foodRanking); // [ '짜장면', '짬뽕' ]
// splice(StartIndex, DeleteIndex)
foodRanking.splice(2, 1); // 2번인덱스 부터 1개 완벽하게 삭제
console.log(foodRanking); // [ '짜장면', '짬뽕', '한우' ]
// splice(StartIndex, DeleteIndex, Item) 삭제된 index값에 item 추가
foodRanking.splice(2, 1, 'hyogi'); // 2번인덱스 부터 1개 완벽하게 삭제
console.log(foodRanking); // [ '짜장면', '짬뽕', 'hyogi', '한우' ]
// splice 활용 정리
// 배열의 첫 요소 삭제
foodRanking.splice(0, 1);
// 배열의 마지막 요소 삭제
foodRanking.splice(foodRanking.length - 1, 1);
// 배열의 첫 요소에 값 추가
foodRanking.splice(0, 0, 'hyogi');
// 배열의 마지막 요소에 값 추가
foodRanking.splice(foodRanking.length, 0, 'hyogi2');
// 배열의 첫 요소 삭제
foodRanking.shift();
// 배열의 마지막 요소 삭제
foodRanking.pop();
// 배열의 첫 요소에 값 추가
foodRanking.unshift();
// 배열의 마지막 요소에 값 추가
foodRanking.push();
// 배열의 특정 값 찾기 (포함되어 있다면 인덱스 위치가 리턴 없다면 -1)
console.log(foodRanking.indexOf('짜장면')); //-1
// 배열의 특정 값 찾기를 뒤에서부터 탐색함.
console.log(foodRanking.lastIndexOf('짜장면')); //-1
// 배열에 특정 값이 있는지 확인 (includes) 있으면 true 없으면 false
console.log(foodRanking.includes('짜장면')); // false
// 배열 뒤집기 (reverse)
foodRanking.reverse();
for...of 반복문
// 배열 (Array)
let foodRanking = [
'짜장면', // 요소
'짬뽕',
'돼지국밥',
'한우'
];
for (let element of foodRanking){
console.log(element); // 짜장면 짬뽕 돼지국밥 한우
}
for (let index in foodRanking){
console.log(foodRanking[index]); // 짜장면 짬뽕 돼지국밥 한우
}
다차원 배열
// 다차원 배열 (multidimensional array)
let foodRanking = [[1, 2], [3, 4], [4, 5]];
console.log(foodRanking[0]); // [ 1, 2 ]
console.log(foodRanking[0][1]); // 2
다양한 숫자 표기법
// 숫자 표기법
let millionaire = 1000000000;
let num = 1e9; // 지수 표기법
console.log(millionaire); // 1000000000
console.log(num); // 1000000000
console.log(millionaire === num); // true
// 숫자 표기법
console.log(13e5 === 1300000); // true
console.log(4.2e3 === 4200); // true
console.log(-2.1e8 === -210000000); // true
// 16진법
let hexOne = 0xff;
let hexTwo = 0xFF;
// 8진법
let oct = 0o377;
// 2진법
let binary = 0b11111111;
console.log(hexOne); // 255
console.log(hexTwo); // 255
console.log(oct); // 255
console.log(binary); // 255
숫자형 메소드
▶JS는 숫자도 객체
// number
let num = 0.1234;
// toFixed(0 ~ 100)
console.log(num.toFixed(3)); // 소수를 다룰때 사용하는 메소드, 숫자만큼 소수점 아래 자리수를 고정해줌 string 0.123
console.log(+num.toFixed(2)); // 0.12 (+ 는 num으로 형변환해줌)
// toString (2 ~ 36) 진법으로 숫자를 변환해줌
console.log(num.toString(2)); // 2진수
console.log(num.toString(8)); // 8진수
console.log(num.toString(16)); // 16진수
console.log(4..toString(2)); // 100 (4 숫자 그대로 2진법으로 변환)
console.log((16).toString(8)); // 20
Math 객체
// 절댓값 (Absolute Number)
console.log(Math.abs(-300)); // 300
// 최댓값 (Maximum)
console.log(Math.max(3, 4, 5, 11, 7, 3, 9)); // 11
// 최솟값 (Minimum)
console.log(Math.min(5, 6, 11, 32, 12, 1, 2)); // 1
// 거듭제곱 (Exponentiation)
console.log(Math.pow(4, 2)); // 16
// 제곱근 (Square Root)
console.log(Math.sqrt(81)); // 9
// 반올림 (Round)
console.log(Math.round(5.7)); // 6
// 버림과 반올림 (Floor and Ceil)
console.log(Math.floor(8.4)); // 8 (버림)
console.log(Math.ceil(4.9)); // 5 (올림)
// 난수 (Random)
console.log(Math.random()); // 0.20732508994709398
미세한 값의 차이가 있는 JS
▶컴퓨터는 0과 1로 처리하다 보니까 가끔 오차가 있는 경우가 있는데
toFixed() 를 사용한뒤 형변환을 해주면 해결된다.
▶round() 사용한다.
문자열 심화
// String
let hyogiString = 'hyogi';
// 문자열 길이
console.log(hyogiString.length); // 5 (공백 포함)
// 요소 접근
console.log(hyogiString[2]); // o 대괄호 표기법
console.log(hyogiString.charAt(3)); // g charAt 메소드
// 요소 탐색
console.log(hyogiString.indexOf('h')); // 0 0번인댁스에 h가 존재함 (존재하지 않으면 -1 출력)
console.log(hyogiString.lastIndexOf('y')); //1 뒤부터 접근
// 대문자 변환
console.log(hyogiString.toUpperCase()); // 대문자 HYOGI
console.log(hyogiString.toLowerCase()); // 소문자 hyogi
// 양 끝 공백 제거
console.log(hyogiString.trim()); // hyogi에 공백이 없으므로 hyogi 출력함
// 부분 문자열 접근 slice(start, end)
console.log(hyogiString.slice(0, 3)); // hyo 0~2번 인덱스까지 출력
console.log(hyogiString.slice(2)); // ogi 2번 인덱스부터 출력
console.log(hyogiString.slice()); // hyogi 전부 출력
기본형과 참조형
기본형 : number, string, boolean, null, undefined ( 변수 = 값 )
참조형 : object ( 변수 = 주소값 )
참조형 복사하기
// 참조형 복사하기
let num1 = [1, 2, 3, 4, 5];
let num2 = num1.slice();
num2.push(6);
console.log(num1); // [ 1, 2, 3, 4, 5 ]
console.log(num2); // [ 1, 2, 3, 4, 5, 6 ]
// 객체
let hyogi = {
title: 'hyogi blog',
language: 'Java'
};
// <1>
let hyogi2 = Object.assign({}, hyogi);
hyogi2.title = 'hyogi it blog';
console.log(hyogi); // { title: 'hyogi it blog', language: 'Java' }
console.log(hyogi2); // { title: 'hyogi it blog', language: 'Java' }
// <2>
for (let key in hyogi){
hyogi2[key] = hyogi[key];
}
hyogi2.title = 'hyogi tistory blog';
console.log(hyogi); // { title: 'hyogi it blog', language: 'Java' }
console.log(hyogi2); // { title: 'hyogi tistory blog', language: 'Java' }
// <3>
function hyogiObject(Object) {
let temp = {};
for (let key in Object){
temp[key] = Object[key]
}
return temp;
};
let hyogi1 = {
title: 'hyogi it blog',
language: 'python'
}
let hyogi3 = hyogiObject(hyogi1);
hyogi3.title = 'hyogi tistory blog';
console.log(hyogi3); // { title: 'hyogi tistory blog', language: 'python' }
const, 변수와 상수 사이
가끔 변수를 상수로 쓰라는 경우도 있는데 그 이유는 변수는 언제 어디서나 변경될 수 있는 위험성이 있기 때문이다.
따라서 상수를 써서 변경 못하게 함으로써 안전성에 확보를 생각한 것이다.
변수 ( variable) : hyogiName
상수 (constant) : HYOGINAME
변수 더 나아가서
var : let과 const처럼 변수 선언할 수 있다.
▶중복된 변수값을 에러발생 시키지 않고 덮어써 버린다.
▶var변수는 scope가 function에서만 구분되어 있다. (전역번수 역할을 하게 된다)
▶끌어올림 : var 변수는 함수 스코프 기준으로 선언되기 이전에도 변수에 접근이 가능하다.
본 포스팅은 codeit; 스터디를 하며 요약했으며
강의에 있는 예제를 저자가 알아보기 쉽도록 변경하여 포스팅 했습니다.
'Studying > JavaScript' 카테고리의 다른 글
[JS 자바스크립트] 비동기식과 동기식의 차이점 (0) | 2023.09.20 |
---|---|
정규 표현식 (Regular Expression) 정리 (1) | 2023.09.18 |
[JavaScript] 자바스크립트 기초 배우기 (1) | 2023.09.14 |
JavaScript 자바스크립트 기본 문법 및 핵심 개념정리 (0) | 2023.03.23 |
블로그의 정보
감성 개발자 효기
효기’s