1995년 탄생
1999년 javascript 표준화
2005년 ajax 등장
2008년 google v8 엔진 출시(crome)
2009년 node.js 등장
2015년 ECMAScript 6(ES6) 출시
2016년 프론트엔드 프레임워크(React, vue, angular) 대중화
현재 javascript는 프론트엔드, 백엔드 개발 및 서버 개발도 활발하게 이루어지고 있다.
객체 지향 프로그래밍
데이터와 함수의 집합. (객체 내부에서는 각각 프로퍼티(property), 메소드(method)로 부른다)
객체를 만들 때는 {}를 사용. 각 속성은 ,로 구분하고 속성은 이름과 값을 가진다.
이름은 문자열로 작성, 값은 다양한 데이터 타입 사용 가능.
동적 타이핑
js는 변수를 지정할 때 타입 지정x
런타임 시점에서 데이터 타입 결정. (프로그램 실행 단계)
함수형 프로그래밍 지원
함수를 일급 객체(first-class object)로 취급.
일급 객체란 함수를 변수에 할당(변수 이름으로 호출)하거나 인자로 전달(callback 함수) 또는 함수로 반환(고차 함수)할 수 있는 함수.
비동기 처리
클라이언트 및 서버 모두에서 사용 가능
var myVar = "Hello World!";
let myLet = "Hello World!1";
const myConst = "Hello World!2";
var - 전역 변수. 재선언 가능.let num1 = 10;
let num2 = 3.14;
let num3 = 2.5e5 // 2.5 x 10^5
let num4 = "Hello" / 2;
let num5 = 1 / 0; //infinity
let num6 = -1 / 0; //-infinity
let str = "Hello World!";
let str = "Hello World!";
str.length // 12
let str1 = "Hello ";
let str2 = "World!";
let result = str1.concat(str2); // Hello World!
let str = "Hello World!";
//시작 위치, 자를 길이
str.substr(6, 5); // World
//시작 위치, 끝 위치
str.slice(6, 12); // World!
let str1 = "Hello World!";
console.log(str1.search("World")); // 6
let str2 = "Hello World!";
let result = str2.replace("World", "Javascript");
console.log(result); // Hello Javascript
let str3 = "apple, banana, kiwi";
let result1 = str3.split(",");
console.log(result1); // [ 'apple', ' banana', ' kiwi' ]
let bool1 = true;
let bool2 = false;
console.log(bool1); // true // typeof boolean
console.log(bool2); // false // typeof boolean
let x;
console.log(x); // undefined
let y = null;
console.log(y); // null
let person = {
name : 'park',
age : 20,
married : true
};
console.log(person); // { name: 'park', age: 20, married: true }
let number = [1, 2, 3, 4, 5];
let fruits = ['apple', 'banana', 'orange'];
console.log(number); // [ 1, 2, 3, 4, 5 ] // number[0] = 1
console.log(fruits); // [ 'apple', 'banana', 'orange' ] // fruits[0] = 'apple'
암시적 형변환
문자열
let result = 1 + "2";
console.log(result); // 12
console.log(typeof result); // string
let result1 = "1" + true;
console.log(result1); // 1true
console.log(typeof result1); // string
다른 데이터 타입 + 문자 = 문자 / +를 사용할 경우만 문자열 우선
숫자
let result2 = 1 - "2";
console.log(result2); // -1
console.log(typeof result2); // number
let result3 = "3" * "2";
console.log(result3); // 6
console.log(typeof result3); // number
다른 데이터 타입 - or * 등 숫자 = 숫자 / -, * 등을 사용할 경우 숫자 우선
명시적 형변환
boolean
console.log(Boolean(0)); // false
console.log(Boolean("")); // false
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
console.log(Boolean("false")); // true
console.log(Boolean({})); // true
문자열 - 값이 있나 없나 판별
객체 - 존재하나 존재하지않나 판별
string(문자열)
let result4 = String(123);
console.log(result4); // 123
console.log(typeof result4); // string
let result5 = String(true);
console.log(result5); // true
console.log(typeof result5); // string
let result6 = String(null);
console.log(result6); // null
console.log(typeof result6); // string
number(숫자)
let result = Number("123");
console.log(result); // 123
console.log(typeof result); // number
console.log(1 + 1); //2
console.log(1 + "1"); //11
console.log(1 - "2"); // -1
console.log(1 - 2); // -1
console.log(2 * 3); // 6
console.log("2" * 3); // 6
console.log(4 / 2); //2
console.log("4" / 2); //2
console.log(5/2); // 2.5
console.log(5%2); // 1
let x = 10;
let x = 10;
x += 5; // x = x + 5;
console.log(x); // 15
let x = 10;
x -= 5; // x = x - 5;
console.log(x); // 5
let a = 10;
a *= 2; // a = a * 2;
console.log(a); // 20
let b = 10;
b /= 2; // b = b / 2;
console.log(b); // 5
let c = 10;
c %= 2; // c = c % 2;
console.log(c); // 0
console.log(2 === 2); // true
console.log(2 === "2"); // false
타입까지 일치해야 true / 엄격한 비교 연산자console.log(2 !== 2); // false
console.log(2 !== "2"); // true
console.log(2 < 3); // true
console.log(2 <= 2); // true
console.log(2 <= 1); // false
console.log(3 > 2); // true
console.log(3 >= 3); // true
console.log(3 >= 2); // false
console.log(true && true); // true
console.log(true && false); // false
console.log(false && true); // false
console.log(false && false); // false
console.log(true || true); // true
console.log(true || false); // true
console.log(false || true); // true
console.log(false || false); // false
console.log(!true);
let a = true;
console.log(!a); // false
let x = 10;
let result = (x > 5) ? "크다" : "작다";
console.log(result); // 크다
console.log(typeof "5"); // string
함수 선언문
function add (매개변수) {
// 함수 내부에서 실행할 로직
}
//두 개의 숫자를 입력 받아서 덧셈을 한 후 내보내는 함수
function add (x, y) {
return x + y;
}
함수 표현식 (함수를 변수에 할당)
//두 개의 숫자를 입력 받아서 덧셈을 한 후 내보내는 함수
let add2 = function (x, y) {
return x + y;
}
함수 호출 - 함수명(매개변수) -> ex) add(x, y)
console.log(add(2, 3)); // 5
let functionResult = add2(3, 4);
console.log(functionResult); // 7
input, output
let arrowFunc01 = (x, y) => {
return x + y;
}
// return문 없이 -> 블록 안에 한 줄만 존재할 때
let arrowFunc02 = (x, y) => x + y;
//매개 변수가 1개만 존재할 시 () 생략 가능
let arrowFunc03 = x => x;
조건문 (if, else if)
// if (조건) {}
let x = 10;
// ()안에 조건식 true or false
if (x < 0) {
console.log("x는 음수입니다.");
} else if (x >= 0 && x < 10) {
console.log("x는 10미만 양수입니다.");
} else {
console.log("x는 10이상 양수입니다.");
}
조건문 (switch)
let fruits = "사과";
// switch case default (각 case마다 break)
switch (fruits) {
case "사과" :
console.log("사과입니다.");
break;
case "바나나" :
console.log("바나나입니다.");
break;
case "키위" :
console.log("키위입니다.");
break;
default:
console.log("아무것도 아닙니다.");
break;
}
조건문의 중첩
let age = 20;
let gender = "여성";
// 미성년자 구분
if (age >= 18) {
console.log("성인입니다.");
if (gender === "여성") {
console.log("성인 여성입니다.");
} else {
console.log("성인 남성입니다.");
}
} else {
if (gender === "여성") {
console.log("미성년자 여성입니다.");
} else {
console.log("미성년자 남성입니다.");
}
}
조건부 실행
// 조건부 실행
let x = 10;
/*if (x > 0) {
console.log("x는 양수입니다.");
}*/
// and조건
(x > 0) && console.log("x는 양수입니다.");
삼항 연산자와 단축 평가
//or조건
let y; // undefined
// y가 undefined면 우측 값 할당
let z = y || 20;
console.log(z); // 20
객체 생성 방법
let person = {
name : "홍길동",
age : 30,
gender : "남자"
};
function Person (name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
let person1 = new Person("홍길동", 30, "남자"); //Person { name: '홍길동', age: 30, gender: '남자' }
let person2 = new Person("홍길순", 20, "여자"); //Person { name: '홍길순', age: 20, gender: '여자' }
객체에 접근하는 방법
let person = {
name : "홍길동",
age : 30,
gender : "남자"
};
console.log(person.name); // 홍길동
console.log(person.age); // 30
console.log(person.gender); // 남자
객체 메소드(객체가 가진 여러가지 기능 : Object.~~~)
Object.key() - key를 가져오는 메소드
let keys = Object.keys(person);
console.log("keys => ", keys); // keys => [ 'name', 'age', 'gender' ]
Object.values() - 값을 가져오는 메소드
let values = Object.values(person);
console.log("values => ", values); // values => [ '홍길동', 30, '남자' ]
Object.entries() - key와 value를 묶어서 배열로 만든 배열 (2차원 배열)
let entries = Object.entries(person);
console.log("entries => ", entries);
// entries => [ [ 'name', '홍길동' ], [ 'age', 30 ], [ 'gender', '남자' ] ]
Object.assign() - 객체 복사
let newPerson1 = {};
Object.assign(newPerson1, person);
console.log("newPerson => ", newPerson1);
// newPerson => { name: '홍길동', age: 30, gender: '남자' }
let newPerson2 = {};
Object.assign(newPerson2, person, { age : 31});
console.log("newPerson => ", newPerson2);
// newPerson => { name: '홍길동', age: 31, gender: '남자' }
객체 비교
//크기가 상당히 크다 -> 메모리에 별도의 공간에 저장
// person1 별도 공간에 대한 주소
let person1 = {
name : "홍길동",
age : 30,
gender : "남자"
};
// person2 별도 공간에 대한 주소
let person2 = {
name : "홍길동",
age : 30,
gender : "남자"
};
console.log("answer => ", person1 === person2); // false 주소가 다르다
//객체를 문자열화(stringify)해서 비교
console.log(JSON.stringify(person1) === JSON.stringify(person2)); // true
객체 병합
let person1 = {
name : "홍길동",
age : 30
};
let person2 = {
gender : "남자"
};
//... : spread operater 전개 연산자
let perfectMan = {...person1, ...person2};
console.log(perfectMan); // { name: '홍길동', age: 30, gender: '남자' }
배열 생성
let fruits = ["사과", "바나나", "오렌지"];
console.log(fruits.length); // 3
let number = new Array(5);
console.log(number.length); // 5
배열 요소 접근 (index 값으로 접근)
let fruits = ["사과", "바나나", "오렌지"];
console.log(fruits[0]); // 사과
console.log(fruits[1]); // 바나나
console.log(fruits[2]); // 오렌지
배열 메소드
배열이름.push() - 배열의 뒤에서 부터 값을 집어 넣음
let fruits = ["사과", "바나나"];
console.log("1 => ", fruits); // 1 => [ '사과', '바나나' ]
fruits.push("오렌지");
console.log("2 => ", fruits); // 2 => [ '사과', '바나나', '오렌지' ]
배열이름.pop() - 배열의 마지막 요소 삭제
let fruits = ["사과", "바나나"];
console.log("1 => ", fruits); // 1 => [ '사과', '바나나' ]
fruits.pop();
console.log("2 => ", fruits); // 2 => [ '사과' ]
배열이름.shift() - 배열의 첫 요소 삭제
let fruits = ["사과", "바나나"];
console.log("1 => ", fruits); // 1 => [ '사과', '바나나' ]
fruits.shift();
console.log("2 => ", fruits); // 2 => [ '바나나' ]
배열이름.unshift() - 배열 제일 앞에 요소 추가
let fruits = ["사과", "바나나"];
console.log("1 => ", fruits); // 1 => [ '사과', '바나나' ]
fruits.unshift("포도");
console.log("2 => ", fruits); // 2 => [ '포도', '사과', '바나나' ]
배열이름.splice() - 배열 자르기
let fruits = ["사과", "바나나"];
console.log("1 => ", fruits); // 1 => [ '사과', '바나나' ]
//splice(x번째 요소부터(index), y개를, z로 바꿔줘)
fruits.splice(1, 1, "포도");
console.log("2 => ", fruits); // 2 => [ '사과', '포도' ]
배열이름.slice() - 배열 자르기 (새로운 배열 만듦)
let fruits = ["사과", "바나나", "키위"];
console.log("1 => ", fruits); // 1 => [ '사과', '바나나', '키위' ]
//slice(x번째 요소부터(index), y전까지)
let slicedFruits = fruits.slice(1, 2);
console.log("2 => ", slicedFruits); // 2 => [ '바나나' ]
배열이름.forEach() - 배열의 각 요소에 함수를 반복 (새배열x)
let numbers = [1,2,3,4,5];
// 매개변수 자리에 함수를 넣는 것을 - 콜백 함수
numbers.forEach(function (item) {
console.log("item입니다 => " + item);
});
// item입니다 => 1, item입니다 => 2, item입니다 => 3, item입니다 => 4, item입니다 => 5
배열이름.map() - 배열의 각 요소에 함수를 반복하나 새로운 배열로 만든다 (return 필요)
let numbers = [1,2,3,4,5];
let newNumbers = numbers.map(function (item) {
return item * 2;
});
//원본 배열의 길이만큼 반환
console.log(newNumbers); // [ 2, 4, 6, 8, 10 ]
배열이름.filter() - 배열의 요소 중 조건를 통과한 요소만 모아 새로운 배열로 만든다 (return 필요)
let numbers = [4,1,5,4,5];
let filterdNumbers = numbers.filter(function (item) {
return item === 5;
});
//조건에 해당되는 요소만 반환
console.log(filterdNumbers); // [ 5, 5 ]
배열이름.find() - 배열의 요소 중 조건을 통과한 첫 요소만 반환해 변수에 할당한다.
let numbers = [4,1,5,4,5];
let result = numbers.find(function (item) {
return item > 3;
});
//조건에 해당되는 첫 번째 요소만 반환
console.log(result); // 4
for문
//for (초기값; 조건식; 증감식) {}
//i 0부터 시작 / i가 10이 될때 까지 / i를 1씩 더 한다.
for (let i = 0; i < 10; i++) {
console.log(i);
}
//배열과 for문은 짝꿍이다.
const arr = [1, 2, 3, 4, 5];
for (let i = 0; i < arr.length; i++) {
console.log(i);
console.log(arr[i]);
}
for ~in문 - 객체의 속성을 출력하는 문법
// 객체의 속성을 출력하는 문법
let person = {
name : "John",
age : 30,
gender : "male"
}
for (let key in person) {
console.log(key + " : " + person[key]);
}
//name : John
//age : 30
//gender : male
while - 무한 루프 위험이 있음
while (i < 100) {
if (i % 5 == 0) {
console.log(i);
}
i++;
}
// 5, 10, 15, ... , 90, 95
do ~ while - 무한 루프 위험이 있음 (구문은 무조건 한 번은 실행)
let i = 0;
//do 먼저 실행되고 조건 판별
do {
console.log(i);
i++;
} while (i < 10);
break, continue - 반복문과 세트
//break
for (let i = 0; i < 10; i++) {
if (i === 5) {
break; // for문 블록을 빠져나온다.
}
console.log(i);
}
//continue
for (let i = 0; i < 10; i++) {
if (i === 5) {
continue; // 밑의 로직을 실행하지 않고 다음 순서로 넘어간다.
}
console.log(i);
}