ES는 ECMA Script의 약자
자바스크립트는 1990년대 Netscape 회사의 Brendan Eich 라는 사람에 의해 최초 개발되었다. 자바스크립트가 잘 되자, MS에서 Jscript라는 언어를 개발해 IE에 탑재하였는데, 이 두 스크립트가 너무 제각각이라, 표준이 필요하게 되었다.
표준을 만들기 위해 자바스크립트를 ECMA(European Computer Manufactures Association)라는 정보와 통신시스템의 비영리 표준 기구에 제출하였고 표준에 대한 작업을 ECMA-262란 이름으로 1996년 11월에 시작해 1997년 6월에 채택되었다.
현재는 ES6 ECMA Script6의 규격을 따르고 있다.즉 ECMA 스크립트는 규격, 표준 즉, 스펙을 말한다.
1.❗배열과 관련해서 새로운 메소드들이 생겼는데 대표적으로 forEach, map, filter, reduce, some, every와 같은 메소드가 생김.이 메소드들은 개발자가 반복 횟수나 조건을 잘못 입력하는 등의 실수를 줄여주는 효과 있음.
2. object에 대한 getter/setter 지원
3. 자바스크립트 strict 모드 지원(더욱 세심하게 문법 검사)
4. JSON 지원(과거에는 XML을 사용하다가, json이 뜨면서 지원)
5. bind() 메소드가 생겼습니다. (this를 강제로 bind 시켜주는 메소드)
1.변수 선언 방법의 변화(let, const)
var a = 1
if(1 == 1){
var a = 234 //함수 내부에 선언되지 않았으므로 글로별 변수와 대체
console.log(a) //234
}
console.log(a) //234
//////////////////////////////////////////////////
let b = 1
if(1 == 1){
let b = 234 //if 조건문에서의 블록화
console.log(b) //234
}
console.log(b) //1
//////////////////////////////////////////////////
const c = 3
if(1 == 1){
const c = 234 //error!
console.log(c)
}
2.템플릿 리터럴(Template Literal)
//기존 문자열 출력 방식
let data = 1234
let desc = 'data is '
console.log(desc + data)
//변경
let data = 1234
let desc = `data is ${data}, ${data * 3}`
console.log(desc)
3.반복문 (for in, for of)
let array = ['a', 'b', 'c']
for(let i in array){
console.log(i) //0, 1, 2 (인덱스 값이 출력 됩니다.)
}
for(let i of array){
console.log(i) //a, b, c
}
4.기본 매개변수(Default Parameters)
function fun(a = 5, b = 5, c = 10) {
return a + b + c
}
console.log(fun()) // 20이 출력 됩니다.
5.화살표 함수(Arrow Function)
function fun(arg){
console.log(arg)
return arg
}
fun(1) //1이 출력됩니다.
let fun2 = (arg)=>{
console.log(arg)
return arg
}
fun2(1) //1이 출력됩니다.
//////////////////////////////////////////////////
function fun(arg){
this.name = arg
}
new fun(1234).name //1234가 출력됩니다.
let fun2 = (arg)=>{ //new 연산자를 통한 생성은 불가능
this.name = arg
}
new fun2(1234).name //에러발생!
6.객체 정의 방법(Define Object)
let fun = {
name : 'picachoo',
print(){ // 콜른(:)없이 표기 가능
console.log(this.name)
}
}
fun.print() //picachoo
let width = 100
let height = 200
let position = { width, height } //콜른(:)없이 표기 가능
console.log(position) // { width : 100, height : 200 }
7.객체의 복사(Copy Object)
let array = [1,2,3,4]
let new_array = Object.assign([], array) //기본값에 복사할 값을 넣습니다.
//기본값에 0,0,0,5,6이 있으면 위 array의 1,2,3,4가 0,0,0,0을 대체하고
//나머지 5,6이 뒤에 추가 됩니다.
array[0] = 123
console.log(array) //123, 2, 3, 4
console.log(new_array) //1, 2, 3, 4 -> array의 변경에 대해 영향받지 않음.
8.계산된 속성 이름(Computed Property Name)
let KEY = 'name'
let data = {
[KEY] : 'value', //동적으로 적용 가능
[`change_${KEY}`] : 'value2'
}
console.log(data) // { name : value, change_name : value2 }
KEY = 'change?'
console.log(data) //이미 할당이 끝난 값은 변경 불가능 { name : value, change_name : value2 }
9.구조분해 할당(Destructing Assignment)
//일반적인 사용 방법
let arr = ['1', '2', '3']
let [one, two, three] = arr
console.log(one) // 1
console.log(two) // 2
console.log(three) // 3
let [, , wow] = arr //첫번째, 두번째를 빈값으로 선언
console.log(wow) //3
//////////////////////////////////////////////////
//값 할당(서로 바꾸기)
let num = 123;
let text = 'hi';
[num, text] = [text, num]
console.log(num, text)
//////////////////////////////////////////////////
//객체의 값에 대해 적용
let data = {width : 100, height : 200}
let {width, height} = data
console.log(width) //100
console.log(height) //200
//////////////////////////////////////////////////
//다양한 변환
let param = {
jsn : {
name : 'hello',
number : 1543
},
arr : [
{arr_name : 'world', index : 4567},
{arr_name : 'world record', index : 5513},
],
param_text : 'im param_text'
}
let {jsn : {name : re_name}, arr : [{arr_name : new_name}], param_text} = param
//re_name은 param.jsn.name을 변환하여 별칭을 준 값
//new_name은 param.arr배열의 첫번째 arr_name을 변환하여 별칭을 준 값
//param_text는 param.param_text의 값을 변수명 그대로 사용한 값(별칭부여X)
console.log(re_name, new_name , param_text)
10.전개구문 연산자(Spread operator)
//일반 사용법
function numbers(...arg){
console.log(arg)
}
numbers(1,2,3,4,5) // 1,2,3,4,5 -> 배열 타입 입니다.
//////////////////////////////////////////////////
//대입하기
let number = [1, 2, 3, 4, 5]
let [one, two, ...nums] = number
console.log(one) // 1
console.log(two) // 2
console.log(nums) // [3, 4, 5]
//////////////////////////////////////////////////
//객체 복사
let obj1 = { string: 'bar', int: 42 }
let obj2 = { ...obj1 }
console.log(obj1, obj2)
//////////////////////////////////////////////////
//배열 복사
let arr = [1,2,3,4,5]
let arr2 = [...arr]
arr[0] = 100
console.log(arr) // 100,2,3,4,5
console.log(arr2) // 1,2,3,4,5
11.클래스(Class)
//클래스 사용 방법
class Building {
constructor(width, height) {
this.width = width
this.height = height
}
log(){ //function을 생략하고 함수를 사용
console.log(this.width, this.height)
}
static print(num){ //static 함수
console.log(num)
}
}
let apt = new Building(100, 200)
console.log(apt.width, apt.height) //100, 200
Building.print(200) //200 -> 오류 발생 : apt.print(200)
//////////////////////////////////////////////////
//상속받아 사용하는 방법
class Apart extends Building { //상위클래스의 생성자를 구현해야 함.
constructor(width, height) {
this.width = width
this.height = height
}
//log, print 함수를 지니고 있음.
}
let apt2 = new Apart(100, 200)
console.log(apt2.width, apt2.height) //100, 200
Apart.print(200)
* test.js
export const test_number = 1234
* test2.js
import * as testCode from "./test.js"
console.log(testCode.test_number) //1234
let prom = (num) => {
return new Promise((res, fail) => {
if (num > 4) {
res(num) //성공이면,
} else {
fail("err") //에러발생
}
})
}
prom(5)
.then(val => console.log(val)) // 5 출력
.catch(err => console.log(err))