1995년 Livescript (Javascript) 탄생
2005년 AJAX등장
자바스크립트 기반 AJAX쓰게 된 이유:
그전에는 효율성, 속도면 부족. 버튼하나 눌러서 어떤 동작을 실행시 페이지 전체 새로고침 했었음.
ajax는 해당되는 영역만 새로고침
일어난 현상: UX의 폭발적인 향상
2009년 node.js등장
브라우저에서만 사용가능했던 전과달리 모든부분에서 사용가능하게 바뀜
프론트엔드, 백엔드 ,DB부분에서 모두 사용가능하게 됨 = fullstack
자바스크립트입장에서 획기적인 사건의 해
2015 ECMAScript 6(ES6) 현재 쓰고있는 자바스크립트 버전
객체 지향 프로그래밍
위에서부터 아래로 순서대로가아닌 객채라는 그룹으로 묶어서 프로그래밍을 구현하는것
ㄴ여러군데에서 재활용이 가능
ㄴ복잡한 프로그래밍수준을 요구하는 지금 필연적으로 써야함.
동적 타이핑
다른언어들은 변수를 지정할때 타입을 지정해줘야함.
자바스크립트는 런타임때 결정 = 코드가 작성된 상태가 아니라 코드가 돌아갈때 결정
함수형 프로그래밍
비동기 처리
클라이언트 측 및 서버 모두에서 사용가능
node.js등장으로 웹개발 전반에 활용가능
기억하고싶은 값을 메모리에 저장. 그값을 재사용하기 위해 선언
var : 오래된 변수선언방식 . 특정상황 아니면 가급적 사용 자제
ES6이후
let : 선언된 블록(중괄호 {}로 둘러싸인 영역) 내에서만 접근가능 .
같은이름으로 재선언 불가 . 할당된 값은 변경가능
const : let과 마찬가지로 블록레벨범위를 가짐. 단 한번 선언된 후 할당한
값을 변경할수 없음.
값 타입을 알수있는 명령어 : typeof 값
1. 숫자
2. 문자(String)
작은 따옴표(')나 큰 따옴표(")로 감싸서 표현
let str = "Hello, world!";
console.log(str.length); // 13 띄어쓰기,!도 포함
let str1 = "Hello, ";
let str2 = "world!";
let result = str1.concat(str2);
console.log(result); // "Hello, world!"
let str = "Hello, world!";
console.log(str.substr(7, 5)); // "world"
//시작위치(7)부터 몇개까지 자르고(5) 반환
console.log(str.slice(7, 12)); // "world"
//시작위치(7)부터 지정된 위치까지 자르고(12) 반환
let str = "Hello, world!";
console.log(str.search("world")); // 7 str변수안에 world가 시작되는 지점을 반환
let str = "Hello, world!";
let result = str.replace("world", "JavaScript");
//(바꿔야할 문자열 , 바꿀 문자열)
console.log(result); // "Hello, JavaScript!"
let str = "apple, banana, kiwi";
let result = str.split(",");
//(구분자(여기서는 ","콤마),반환할때 요소갯수 (여기선 생략중))
//문자열을 배열로 바꿀때 자주씀 구분자를("") 빈문자열 사용시 각각 개별문자로 쪼개서 출력
console.log(result); // ["apple", " banana", " kiwi"]
3. 불리언(Boolean)
참(true)과 거짓(false)을 나타내는 데이터 타입.
불리언 데이터 타입은 조건문(if, else, switch 등)과 논리 연산자(&&, ||, !)와 함께 많이 사용.
4. undefined
un : not ,defined : 정의하다.
값이 할당이 되지 않음.
5.null
값이 존재하지 않음을 명시적으로 나타내는 방법
null !== undefined 널과 언디파인드는 다른의미
단 null == undefined 이건 true. 상대적으로 느슨한 동등비교시 둘다 값이 없다는 의미로 .
6.객채
속성과 메서드를 가지는 박스.{}안에 속성으로는 키와 키값으로 구성,
메서드는 속성중에 함수로 정의된 것.
7.배열
여러개의 데이터를 순서대로 저장하는 데이터타입.[]안에 배열내 요소들은
각각의 위치값을 가지고 있고 그걸 인덱스라고함. 0부터시작
String(123) = "123" //(문자열로 바뀜)
Number("123") = 123 //(숫자형으로 바뀜)
boolean("false") = true//(문자열 false는 true. 불린형으로 바뀜 )
1. 산술 연산자
2. 할당 연산자
3. 비교 연산자
두값을 비교후 그 결과에 따라 불리언 값을 반환
일치 연산자(===) : 두 값이 같은지 비교하며 타입도 같아야함. 같으면 true
불일치 연산자(!==) : 두 값이 다른지 비교하며 타입도 달라야함. 다르면 true
작다(<) 연산자 : 첫번째 값이 두 번째 값보다 작은지 비교. 작으면 true
크거나 같다(>=) 연산자 : 첫번째 값이 두번째 값보다 크거나 같은지 비교.
크거나 같으면 true
4.논리 연산자
논리곱(&&) 연산자 : 모든 조건이 참일 때 true를 반환.
조건 중 하나라도 거짓이면 false를 반환
논리합(||) 연산자 : 조건 중 하나라도 참이면 true를 반환.
모든 조건이 거짓일 때만 false를 반환.
논리부정(!) 연산자 : 논리 값을 반전시킴.
참을 거짓으로, 거짓을 참으로 변경
논리연산자는 단축평가를 수행함. 앤드연산자(&&)에서 첫번째 조건이 false면
두번째 조건을 평가하지 않고 첫번째 조건의 결과를 반환함.
반대로 or연산자(||)는 첫번째 조건이 true일 경우, 두 번째 조건을 평가하지않고 첫번째 조건을 결과를 반환함.
이걸 왜 주석을 다냐면 문제풀때 이거때문에 헷갈린적이있어서.
5.삼항 연산자
조건식 ? 값 1 : 값 26.타입 연산자
input(매개변수)과 output(반환값 return)을 가지고 있는 단위.
코드의 재사용성을 높일 수 있음.
1. 함수 정의하기
function add(x, y) {
return x + y;
}
const add = function(x, y) {
return x + y;
};
2. 함수 호출하기
함수 이름 뒤에 괄호 ()를 붙이고, 괄호 안에 필요한 경우 인수를 넣음
function add(x, y) { // 매개변수 x,y에 각각 2,3이 들어옴
return x + y; //더한후 리턴
}
console.log(add(2, 3)); // 5 인수로 2,3을 넣음
let add1 = function(a,b){ //변수 add1은 매개변수 a,b를 받는 함수임
return a+b
}
let result = add1(5,10) //변수 result에 add1함수에 5,10인수를 넣음
console.log(result); // 15
3. 함수 스코프
영향을 끼칠수있는지 범위.
let x = 10;
function printX() {
console.log(x);
}
printX(); // 10
function printX() {
let x = 10;
console.log(x);
}
printX(); //10
if (true) {
let x = 10;
console.log(x);
}
console.log(x); // ReferenceError: x is not defined
4. 화살표 함수
ES6에서 도입된 함수를 짧게 쓸 수있는 문법. this바인딩 방식차이가 있음(이건 나중에)
let add = (x, y) => { //function 대신 매개변수() 다음에 => 표시후 중괄호
return x + y;
}
console.log(add(2, 3)); // 5
let add = (x, y) => x + y;
console.log(add(2, 3)); // 5
let square = x => x * x;
console.log(square(3)); // 9
키(key)-값(value) 쌍으로 구성되며 여러 개의 키(프로퍼티)을 하나의 변수에 담고 관리
1. 객체 생성
let person = {
name: "홍길동",
age: 30,
gender: "남자"
};
function Person(name, age, gender) { //세개의 매개변수를 받음
//함수이름의 첫글자는 대문자로
//this 키워드를 사용하여 객체의 속성을 정의
this.name = name; //this는 생성될 새로운 객체를 가리킴
this.age = age;
this.gender = gender;
}//함수 호출 시 제공된 매개변수(name, age, gender) 값으로 초기화
let person1 = new Person("홍길동", 30, "남자");//new 키워드와 함께 Person 생성자 함수를 호출
let person2 = new Person("홍길순", 25, "여자");
2. 객체 속성 접근
점(.)을 이용하거나 []대괄호를 사용 . 보통 점사용법을 쓰고 속성(프로퍼티)이름이 동적일때 ,
유효한 변수이름이 아닐때 속성이름을 문자열로 감싼후 대괄호 안에 넣어 사용.
let person = {
name: "홍길동",
age: 30,
gender: "남자"
};
console.log(person.name); // "홍길동"
console.log(person.age); // 30
console.log(person["gender"]); // "남자"
3. 객체 메서드
객체가 가진 여러가지 기능
let person = {
name: "홍길동",
age: 30,
gender: "남자"
};
let keys = Object.keys(person);
console.log(keys); // ["name", "age", "gender"]
let person = {
name: "홍길동",
age: 30,
gender: "남자"
};
let values = Object.values(person);
console.log(values); // ["홍길동", 30, "남자"]
let person = {
name: "홍길동",
age: 30,
gender: "남자"
};
let entries = Object.entries(person);
console.log(entries); //[ [ 'name', '홍길동' ], [ 'age', 30 ], [ 'gender', '남자' ] ]
let person = {
name: "홍길동",
age: 30,
gender: "남자"
};
let newPerson = Object.assign({}, person, { age: 35 });
console.log(newPerson); // { name: "홍길동", age: 35, gender: "남자" }
let person1 = {
name: "홍길동",
age: 30,
gender: "남자"
};
let person2 = {
name: "홍길동",
age: 30,
gender: "남자"
};
console.log(person1 === person2); // false
console.log(JSON.stringify(person1) === JSON.stringify(person2)); // true
let person1 = {
name: "홍길동",
age: 30
};
let person2 = {
gender: "남자"
};
let mergedPerson = {...person1, ...person2};
console.log(mergedPerson); // { name: "홍길동", age: 30, gender: "남자" }