자바스크립트는 처음에는 웹개발용으로 사용되는 언어였으나 현재는 VR, AR, 블록체인, 모바일 등의 개발도 가능해졌다.
2015년 발생한 업데이트 이후 사람들이 좋아하게 되었다고 한다.
기본 문법
세미콜론
한 줄에 한 문장씩 입력하는 경우, 자바스크립트는 알아서 맨 뒷줄에 ';' 세미콜론을 찍어준다.
하지만 한 줄에 두 문장이 오게될 경우 세미콜론을 붙여서 문장을 구분해줘야한다.
console.log('A')
console.log('B')
console.log('C')console.log('D') // 에러발생
주석
사용 목적
- 어떤 의도로 코드가 작성되었는지 설명할 때
- 구현한 코드가 어떤 동작을 하는지 기록할 때
한 줄 주석
// const a = 'A';
여러 줄 주석
/*
const num = 30;
const flag = true;
*/
자료형
Number
- 정수(Integer)
- 소수(floating point)
1. 지수표기법
- let num = 1e9; >> 1000000000. 지수표기법 이라 부른다.
- 25e5 === 2500000
- 3.5e-3 === 0.0035
- -9.1e-5 === 0.000091
2. 2,8,16진법 표기
- 0b11111111 === 0o377 === 0xff
- 2진법. 8진법 16진법
3. 숫자형메소드
- toFixed
- let myNumber = 0.3591; my number.toFixed(7) === 0.3591000
>>> toFixed함수는 소숫점아래 파라미터번째까지 무조건 소수점으로 표현해주는 것.
- 현재 가진 소숫점보다 적은 값을 입력하면 반올림, 많은 값을 입력하면 0으로 채워준다.
- 리턴값은 문자열이다.
- 문자열앞에 ‘+’ 붙이면 넘버가된다. 예를들면 +’3.5’
- toString
- Number.toString(2) >> number를 2진법으로 바꿔준다.
- number.toString(8) >> number를 8진법으로 바꿔준다.
- Number.toString(16) >> number를 16진법으로 바꿔준다.
- 리턴값은 문자열.
- toString을 number라는 변수에 담지 않고 바로 숫자에 붙여도 되는데, 정수에 .을 붙일경우 소수점으로 오해할 수 있으니 . 을 2번 붙인다.
- 255..toString(2) 이렇게.
- 아니면 (255).toString(2) 이렇게.
4. 랜덤
// 특정 범위 안에서의 랜덤 숫자를 뽑는 방법
Math.floor(Math.random() * (max - min)) + min;
// 예시 0 <= num < 10
Math.floor(Math.random() * (10 - 0)) + 0;
// 예시 0 <= num <= 10
Math.floor(Math.random() * (10 - 0 + 1)) + 0;
문자열(String)
- 문자열의 앞 뒤 따옴표를 " 또는 ' 로 통일시켜야한다.
- length가 있다.
- 배열처럼 값에 접근 가능하다.
- for of문 사용 가능하다.
- 문자열과 배열의 차이 : 배열은 mutable 바뀔 수 있는 자료형이고, 문자열은 immutable 바뀔 수 없는 자료형이다.
불린(Boolean)
- true / false 값이 올 수 있다.
- 직접 값을 넣기보다는 조건문의 결과로 값이 들어가는 경우가 더 많다.
null
- 의도적으로 빈 값을 표현할 때 사용하는 값.
undefined
- 값이 없다는 것을 확인하는 값
객체
{
key : value
propertyName : property Value
}
key
- propertyName은 문자열이다.
- propertyName은 따옴표로 감싸지 않아도 자바스크립트가 알아서 문자열로 인식한다.
- 하지만 따옴표로 감싸지 않을 때에는 아래의 조건을 갖춰야한다.
- 첫번째 글자는 [ 문자, _, $ ] 중 하나로 시작해야한다.
- 띄어쓰기와 '-' 사용이 금지된다.
value
- null, 객체도 value가 될 수 있다.
객체의 데이터에 접근하기
let person = {
name: ‘Ann’,
‘born Year’ : 2000,
student: true,
hate: null,
like: {
title: ‘diving’,
period: 3
}
}
// 점표기법
person.name;
// 대괄호 표기법
person['name'];
person['born'+'year'];
객체의 프로퍼티 수정하기
person.name = 'Anna';
객체의 프로퍼티 추가하기
person.favoritFood = 'pizza';
객체의 프로퍼티 삭제하기
delete person.favoriteFood;
프로퍼티의 존재 여부 확인하기
console.log('name' in person); //true
Date 객체
Let myDate = new Date();
Let myDate = new Date(‘2023-09-21’);
Let myDate = new Date(‘2023-09-21T11:30:29’);
Let myDate = new Date(2023, 8, 21,11,30,29);
/* get 함수들 */
myDate.getFullYear();
myDate.getMonth(); // 1월은 0.
myDate.getDate(); // 일자
myDate.getDay; // 요일. 일요일부터 0~6.
myDate.getHours();
myDate.getMinutes();
myDate.getSeconds();
myDate.getMilliseconds();
myDate.getTime(); // 타임스탬프
Date.now(); // 지금 시간이 필요할 때 사용해라. 가독성, 성능도 유리.
/* set 함수들 */
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:00 UTC부터 밀리초 이후를 나타내는 날짜 설정
/* locale */
console.log(myDate.toLocaleDateString()); // myDate가 가진 날짜에 대한 정보 (년. 월. 일)
console.log(myDate.toLocaleTimeString()); // myDate가 가진 시간에 대한 정보 (시:분:초)
console.log(myDate.toLocaleString()); // myDate가 가진 날짜와 시간에 대한 정보 (년. 월. 일 시:분:초)
배열
let animals = ["토끼", "거북이", "강아지", "고양이"];
animals[10] = "노루";
console.log(animals[6]); // undefined
/* 배열 함수들 */
// 1. splice
Member.splice(1); // 1번인덱스부터 전체삭제. (값 1개만 남아있다.)
Member,splice(1,2) // 1번인덱스부터 2개 삭제.
Members.splice(1,1,’NiceCodeit,’HiCodeit’) // 1번인덱스부터 1개를 삭제하고 뒤 2개를 추가한다.
members.splice(0,0,’a1’,’a2’) // 0번째 인덱스부터 0개 삭제하고 뒤 값 2개 0번째에 추가한다.
// 2. shift() : 첫 요소 삭제
// 3. Pop() : 마지막 요소 삭제
// 4. unshift(value) : 첫 요소로 값 추가
// 5. push(value): 마지막요소로 값 추가
// 6. Members.indexOf(‘토끼’) // 0. 없으면 -1. 여러개면 맨 처음거만.
// 7. members.lastIndexOf(‘토끼’) // 뒤에서부터 찾기때문에 여러개면 맨 뒤에거만.
// 8. Members.includes(‘토끼’) // true, 없으면 false
// 9. members.reverse() // 배열순서를 거꾸로 뒤집는다.
typeof 연산자
typeof 1 // 'number';
typeof(typeof 1) // 'string'
- 위와같이 값이 어떤 자료형인지 문자열로 알려준다.
- 사칙연산보다 연산 우선순위가 높다.
형변환
- 산술연산(+, -, *, / %, **)의 경우 '+' 를 제외사고 숫자로 자동형변환된다.
- 관계 비교 연산(<, <=, >, >=) 숫자형으로 비교 후 불린값을 출력한다. 비교 불가능한 경우에는 false.
- 같음 비교 연산(===, !==, ==)
추상화(Abstraction)
- 여러가지 사물이나 개념에 공통되는 특성이나 속성따위를 추출하여 파악하는 작용.
- 구체적인 정보는 숨기고 꼭 필요한 핵신만 보여주는 것을 추상화라고 한다.
- 책의 제목, 영화의 줄거리, 지도 등 목적에 맞게 단순화 하는 작업을 추상화라고 할 수 있다.
추상화 방법
- 목적을 명확히 한다.
- 불필요한 것들은 숨긴다.
- 핵심만 드러낸다.
optional parameter
function introduce(name, nationality = '한국'){
console.log(nationality);
}
introduce('Ann');
- 위와같이 파라미터로 nationality가 들어오지 않을 경우, '한국'으로 값을 할당해준다.
- 옵셔널파라미터는 파라미터 위치 중 가장 뒤쪽으로 와야한다.
변수
- 값을 담기 위해 이름을 붙인 상자.
- 반복적으로 구체적인 값을 입력해야 할 때 용이하다.
- 수정에 안정적이다.
- 변수이름으로 값을 설명할 수 있다.
변수 선언
let potato;
변수 할당
potato = 10;
변수 작명 가이드
1. 필수 룰(어길시 에러 발생)
- 문자, 밑줄, 달러기호로 시작해야한다.
- 두번째 글바주터 숫자를 넣을 수 있다.
- 대문자와 소문자를 구별한다.
- 예약어는 사용하지 않는다.(if, for,let 등 사용불가능)
2. 선택 룰(어겨도 에러가 발생하지 않는다.
- 의미없는 이름 짓지 않기(ex- const a;)
- 너무 추상적인 이름 짓지 않기(ex- const name;)
- 변수 이름은 camelCase로 짓기(ex-const tomatoJuice;)
함수
- 명령을 저장한다.
- 변수와 마찬가지로 선언이 필요하다.
함수 선언
function makeJuice(){
명령;
명령;
}
함수 호출
makeJuice();
파라미터
- 매개변수
- 함수 내에서 변수처럼 사용할 수 있다.
for in 반복문
for(let key in person){
console.log(key);
}
- 객체를 반복할 때 적합하다.
for of 반복문
for(let element of influencer){
console.log(element);
}
- 배열을 반복할 때 적합하다.
- 인덱스가 필요할경우 그냥 for문을 쓰는 것이 좋다.
기본형과 참조형
1. 기본형
- number, string, boolean, null, undefined
- 변수라는 상자에 값을 넣는 형태
2. 참조형
- object, array
- 변수라는 상자에 주소값이 담긴다.
3. 복사하기
/* 배열의 복사 */
let arr = [1, 2, 3];
// 얕은 복사
let arr2 = arr;
// 깊은 복사
let arr3 = arr.slice();
/* 객체의 복사 */
let ob = { name: 'Ann', age: '20'};
// 얕은 복사
let ob2 = ob;
// 깊은 복사
let ob3 = Object.assign({},ob);
// 아래 함수는 객체의 값이 참조형인경우 전체를 복사하는 함수이다.
function cloneObject(object){
if(object === null || typeof object !==‘object’){
return object;
}
let temp;
if(Array.isArray(object)) {
temp = [];
}else{
temp = {};
}
for( let key of Object.keys(object)) {
temp[key] = cloneObject(object[key])
}
return temp;
}
'JavaScript' 카테고리의 다른 글
JavaScript - 이벤트 핸들링 (0) | 2023.10.03 |
---|---|
JavaScript - 노드 선택 (0) | 2023.10.03 |
JavaScript - 브라우저의 동작 원리 (0) | 2023.10.01 |
JavaScript - 얕은 복사, 깊은 복사 (0) | 2023.09.24 |
JavaScript - ==, === 차이점 (0) | 2023.09.24 |