codeit 으로 공부하면서 정리한 내용을 작성했습니다!
챕터 2는 내용이 많아서 다 공부하는데 시간이 걸릴 것 같다.!
ECMASCript!? - 자바스크립트 표준 명세서
국제표준화 기구(ecma)에서 관리를 하고 있다.
규칙이나 세부사항들을 ECMA 문서로 관리를 하고 있는데 이것을 ECMAScript 라고 한다.
JavaScript는 프로그래밍 언어이고, ECMAScript는 프로그래밍 언어의 표준, 설명서!
Modern JavaScript - 현시점에 사용하기 적합한 범위 내에서 최신 버전의 표준을 준수하는 자바스크립트
기본형 - Number, String, Boolean, Symbol, BingInt, Null, Undefined
참조형 - Object
유연한 데이터 타입!
console.log(2+'3') // '23'
console.log('3' * 5) // 15
곱셈의 경우에는 연산 대상을 모두 숫자 형으로 형 변환을 한 다음 연산이 수행
False: false, null, undefined, NaN, 0, ''
True: 나머지 값들!
// Hi 가 출력된다.
if ('me'){ // True
console.log('Hi');
} else {
console.log('bye');
}
// NaN 이 출력된다.
if (Number('test') // NaN
AND: 왼쪽이 true 이면 오른쪽 값을 리턴 / 왼쪽이 False 이면 왼쪽 값을 리턴
OR: 왼쪽이 True 이면 왼쪽 값을 리턴 / 왼쪽이 False 이면 오른쪽 값을 리턴
console.log(null && undefined); // null
console.log(0 || true); // true
console.log('0' && NaN); //NaN
연산자 왼편 값이 null이나 undefined 이면 오른쪽 값을 리턴하고, 둘 다 아닌 경우 왼쪽 값을 리턴한다,
const example1 = null ?? 'anything'; // 'anything'
const example2 = undefined ?? 'something'; // 'something'
const example3 = 'anything' ?? 'something'; // 'anything'
var를 사용하다가 es2015부터 let과 const가 등장.
두 방식이 다른 특성을 가지고 있기 때문에 최대한 일관되게 작성을 해야한다.
변수에 함수를 할당하는 것이 포인트가 아니라 함수 선언을 값처럼 사용하는 것이다.
선언 이전에 함수에 접근할 수 없다.
const printCodeit = function(){
console.log('test');
}
printCodeit();
myBtn.addListenner('click', function(){
console.log('test event');
})
함수 선언보다 먼저 호출해도 함수를 호출 할 수 있다.
printCodeit();
function printCodeit (){
console.log('test')'
}
함수를 선언할 때,함수에 이름을 붙여주는 것을 기명 함수 표현식이라고 한다.
만약, 이름이 없는 함수의 경우에는 변수 이름 그 자체를 문자열로 가진다.
외부에서 함수 이름을 호출하여 함수를 사용할 수 없다.
const hi = functioin(){
console.log('test');
}
console.log(hi.name) // hi
일반적으로, 기명 함수 표현식은 함수 내부에서 함수 자체를 가리킬 때 사용된다.
예를 들어 재귀함수가 있다.
// 기명 함수 표현식이 아닌 경우
let countdown = function(n) {
console.log(n);
if (n === 0) {
console.log('End!');
} else {
countdown(n - 1);
}
};
let myFunction = countdown;
countdown = null;
myFunction(5); // TypeError
기명 함수 표현식
let countdown = function printCountdown(n) {
console.log(n);
if (n === 0) {
console.log('End!');
} else {
printCountdown(n - 1);
}
};
let myFunction = countdown;
countdown = null;
myFunction(5); // 정상적으로 동작
(function(x,y){
console.log(x + y);
})(3, 5);
함수를 특별한 값으로 취급한다.
다른 함수에 파라미터로 사용되는 함수를 콜백함수라고 부른다.
함수를 리턴하는 함수를 고차함수라고 부른다. 또는 이중괄호를 사용해서 고차함수로 리턴되는 함수를 바로 사용할 수 있다.
// 값으로서 함수
function getPrintHi() {
return function() {
console.log('Hi');
}
}
const sayHi = getPringHi();
sayHi(); // Hi
getPrintHi()(); // 고차함수를 바로 호출 가능하다.
함수 선언을 할 때, 작성하는 것을 파라미터이고 선언한 이후 함수를 호출하여 사용하는 것을 아규먼트(Argument)라고 한다.
function hello (name = 'javascript', code='jj'){ // 파라미터
console.log(`${name}!와 ${code}`);
}
hello('mj') // 아규먼트
hello(undefined, 'python') // javascript와 python
function add (x, y = x + 3){
console.log(`${x}과 ${y}`);
}
add(3); // 3과 6
// 이렇게도 사용이 가능하다.
function pringtArgumetns(a,b,c){
for (const arg of arguments){
console.log(arg);
}
}
// 파라미터를 안 사용해도 출력이 가능하다.
function print(){
for (const arg of arguments){
console.log(arg);
}
}
function('몰라','으어어') // '몰라','으어어'
function RestParameter(...args){
for (const arg of args){
console.log(arg.splice(0, 2)); // 배열 메소드 사용이 가능하다.
}
}
function PrintRank(first, second, ...others){
console.log(`우승: ${first}`);
console.log(`준우승: ${second}`);
for (const arg of args){
console.log(`참가자들: ${arg}`);
}
}
첫 번째 아규먼트는 출력이 되지 않도록 한다.
1. shift 사용
- 첫 번째 배열을 제거해준다.
2. rest parameter를 사용
파라미터가 한 개인 경우 소괄호를 생략할 수 있지만, 코드의 가독성을 위해서는 소괄호 생략을 지양한다.
arguments 객체가 없어서 함수로 반환이 안된다.
// 원래 함수
const getTwice = function(number) {
return number * 2;
}
// function 제거
const getTwice = (number) => {
return number * 2 }
// 소괄호 제거
const getTwice = number => {
return number * 2 }
// 중괄호 제거
const getTwice = number => number * 2
//
const getCodeit = () => ({name:'Codeit', });
myBtn.addEventListener('click', () => {
console.log('button is clicked!');
}
일반함수와 arrow function 에서 this를 다루는 방법이 다르다.
arrow function 에서는 this를 지양하도록 하자.
arrow function이 선언되기 직전에 유효한 this 값과 똑같은 값을 가지고서 동작하게 된다.
function getFullName(){
return `${this.firstName} ${this.lastName}`;
}
const user = {
firstName: 'Tess',
lastname: 'Jang',
getFullName: getFullName;
}
const admin = {
firstName: 'kim',
lastname: 'min',
getFullName: getFullName;
}
console.log(user.getFullName());
console.log(admin.getFullName());