개요함수는 객체다근데 객체는 함수 아님17.1 Object 생성자 함수new Object() 로 빈 객체를 생성하고 프로퍼티를 동적으로 추가하는 방식. 빌트인 생성자 함수(String, Number, Boolean, Function, Array, Date, RegExp, Promise 등)도 생성이 가능하다.자바에서는 너무나도 친숙한 이 방법이 객체 리터럴이라는 방식에 먹혀 사용되지 않는다고 한다... 이럴수가17.2 생성자 함수17.2.1 객체 리터럴에 의한 객체 생성 방식의 문제점이놈도 문제가 있긴 있음그것은 바로 반복해서 객체를 생성해야할때 매번 추가해줘야하는것const person1 = { name: "Kim", age: 20, introduce() { console.log(`안녕하세요..
분류 전체보기
개요나는 var가 싫다var를 패고싶다왜 내가 var를 패고싶은지 지금부터 하나씩 알아보겠다var 키워드로 선언한 변수의 문제점변수 중복 선언 허용이건 그럴수도 있다.Python도 그렇고 허용되는 언어가 좀 있으니깐var x = 1;var y = 2;var x = 100;var y; // 초기화문이 없는 변수 선언문은 무시된다console.log(x); // 100console.log(y); // 2초기화문이 없는 변수 선언문은 무시되는게 좀 골때리기는 하지만 그래도 뭐 이정도는 인정한다아무든 var는 재할당이 가능하기 때문에 의도치않은 동작이 발생할 수 있어 조심해야한다.왜 중복 선언이 허용되고 초기화문은 무시될까var는 ES6 이전 자바스크립트의 오래된 변수 선언 방식이다.초기 자바스크립트는 지금처럼..
전역 변수의 문제점개요전역변수는 위험하다왜 그런지 알아보자변수의 생명 주기지역 변수의 생명 주기함수 호출 시 생성되고 함수가 종료되면 소멸함함수의 생명주기와 동일하다function foo() { var x = 'local'; console.log(x); return x;}foo();console.log(x) // 레퍼런스 에러골때리는게 호이스팅인데 얘는 함수가 실행되는 시점에 지역 스코프에 소속된 변수들을 호이스팅 한다고 함추가로 지역변수가 함수보다 오래 생존하는 경우도 있다고 한다함수 외부에서 함수 내부에 선언된 지역변수를 참조하고 있다면 아직 GC가 정리할 수 없어서 값이 남아있게 된다.이는 스코프도 마찬가지고이를 클로저라고 하는데 24장에서 자세하게 풀어준단다전역 변수의 생명 주기var 전역 변수는..
스코프개요스코프는 변수라는 양을 가둬놓는 울타리와 같다오늘 회사 앞에 양이 왔다 (진짜임) 스코프란?스코프란 유효범위로 특정 변수를 참조할 수 있는 범위 라고 생각하면 된다function add(x, y) { console.log(x, y) // 2 5 return x + y}add (2, 5)console.log(x, y); // 레퍼런스 에러변수는 자신이 선언된 위치에 의해 자신이 유효한 범위를 뜻함그래서 이렇게 동작함var x = 'global';function foo() { var x = 'local'; console.log(x); // local}foo()console.log(x); //global이렇게 코드가 어떤 변수를 참조해야 할 것인지를 결정해야하는데 이를 식별자 결정 이라 한..
함수란?함수다매개변수를 전달받아 주어진 로직대로 수행한 뒤 반환하는것을 함수라 함// 함수 정의function add(x, y) { return x + y;}// 함수 호출add(2, 5); // 7함수를 사용하는 이유코드의 재사용: 같은 로직을 필요할 때마다 호출 → 중복 제거유지보수의 편의성: 고칠 데가 한 군데신뢰성: 중복이 줄면 버그 날 구석도 줄어듦가독성: 잘 지은 함수 이름은 그 자체로 코드를 읽기 쉽게 만든다 (코드는 곧 문서)// 매번 직접 계산하면 중복 + 실수 가능성var a = (1 + 2) / 2;var b = (10 + 20) / 2;// 함수로 추상화하면 이름만 봐도 의도가 보임function average(x, y) { return (x + y) / 2;}average(1, 2..
개요원시타입, 객체타입이란 뭐냐!원시타입은 원시값이고 객체타입은 객체임 (진짜임)이번 챕터 진행하면서 지능 -10 됐음원시 값변경 불가능한 값원시값의 가장 큰 특징중 하나로는 변경이 불가능하다 라는 특징이 있다.한번 생성된 값은 읽기 전용으로써 변경이 불가능하다는 뜻var test = 10; // 여기서 '10' 은 죽을때까지 10임근데 그럼 변수에 값을 재할당 하는건 뭐냐! 라고 했을때그건 값을 버려버리고 새집을 얻는다는 것var test = 10; // 여기서 '10' 은 죽을때까지 10임test = 20; // 니 값은 이제부터 20이여이때 중요한 건, 값이 바뀌는 게 아니라 변수가 가리키는 대상이 바뀐다는 것이다.재할당이 일어나면 기존 값(10)을 수정하는 것이 아니라 새로운 원시값(20)이 생..
모던 자바스크립트 Deep Dive 10장개요자바스크립트의 모든것은 원시값을 제외하고 객체로 이뤄져있다객체는 변경 가능한 값이다핵심 개념객체는 프로퍼티(상태)와 메서드(동작)의 집합객체 리터럴 {}로 가장 간단하게 생성 가능프로퍼티 키는 문자열 또는 심벌, 값은 아무거나 OK객체란?원시값 또는 다른 객체를 하나로 구성한 복합적인 자료구조임프로퍼티는 객체의 상태를 나타내는 값, 메서드는 프로퍼티를 참조하고 조작할 수 있는 동작참고로 객체 == 함수 수준으로 연관성이 짙다고 함객체 리터럴에 의한 객체 생성{자바스크립트의 객체 생성 방식들 중 가장 일반적인 방법}보통의 언어들은 new 연산자와 함께 생성자를 호출하여 인스턴스를 생성한다// 이궈궈던 ㅋㅋResponseDTO dto = new ResponseDT..
개요명시적 타입변환과 암묵적 타입변환이 있음명시적 타입 변환은 타입 캐스팅이라고도 함반대로 암묵적 타입변환은 타입 강제 변환이라고도 함책에서는 잘 쓰면 가독성이 좋다고 하는데 난 이건 동의 못하겠음 ex) !!x -> boolean암묵적 타입 변환은 앞에서 지겹도록 공부했으나 한번 더 확실하게 집고가자핵심 개념명시적 타입 변환(타입 캐스팅): 개발자가 의도적으로 값의 타입을 변환암묵적 타입 변환(타입 강제 변환): 자바스크립트 엔진이 표현식을 평가할 때 자동 변환암묵적 타입 변환 (Implicit Coercion)자바스크립트는 문맥에 부합하지 않는 상황을 용납 못하는것같음그냥 다 말이 되게 해'10' + 2 // '102'5 * '10' // 50!0 // trueif (1) {} // 이것도 실행됨문자..
제어문 (Control Flow Statements)개요제어문이란말 그대로 제어문임코드의 흐름을 인위적으로 제어할 수 있기 때문하지만 이를 남발하면 코드를 읽기 어려워진다고 한다그래서 이를 해결할 수단으로 고차 함수를 사용한다고 함고차함수란 함수를 인자로 받거나 반환하는 함수를 뜻하는데 여기서 설명하는 고차 함수는 forEach, map, filter, reduce를 뜻함일단은 제어문부터 이해하고 넘어가자핵심 개념제어문은 코드의 실행 순서를 변경한다위에서 아래로 순차적으로 실행되는 흐름을 제어문으로 변경할 수 있다블록문 (Block Statement)제어문을 이해하려면 블록문을 먼저 이해해야 한다문을 중괄호로 묶은 것으로 그냥 코드블록임블록문도 자체 종결성을 갖기 때문에 블록문의 끝에는 세미콜론을 붙이지..
모던 자바스크립트 Deep Dive 7장연산자는 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수연상등을 수행해 하나의 값을 만든다연산의 대상은 피연산자라고 함 피연산자는 값으로 평가될 수 있는 표현식이여야 함연산자는 피연산자를 연산해 새로운 값을 만든다이때 산술연산이 불가능한 경우 NaN을 반환한다고 함NaN이란?난은 예상외로 값이 없음은 아니고 특정 데이터 타입 안에서 정의된 특수 값 (special value)라고 함그래서 typeof NaN 을 찍어보면 number라고 나온다고 함 (세상에)숫자가 꺠졌을 뿐이지 안에 뭔가 값은 있다고 함Number는 64비트를 먹는데 exponent 비트가 전부 1이면 NaN으로 판단, 그 외의 값은 NaN끼리도 다 다름63 | 62 ~ 52..