Front-end/Javascript
-
[강제변환]Front-end/Javascript 2021. 4. 12. 23:32
명시적 강제변환(explicit coercion ) : 의도적인 타입 변화 암시적 강제변환 (implicit coercion) : 작업 도중 사이드 이펙트로부터 발생하는 타입 변환 추상연산 : ToString,ToNumber,ToBoolean ToNumber 숫자 아닌 값 -> 수식 연산이 가능한 숫자 변환 로직 true => 1 , false => 0, undefined => NaN, null => 0 , object => 1.원시값으로 변환 후 그 값을 ToNumber(원시값) 으로 변환한다. 원시값으로 변환 시 1)valueOf 메서드를 구현했으며 valueOf() 를 사용할수있고 반환값이 원시값이면 강제변환. 그렇지 않으면 toString()을 이용하여 강제변환. 원시값으로 변환하지 못할땐 typ..
-
변수의 선언과 호이스팅Front-end/Javascript 2021. 4. 8. 12:41
호이스팅 자바스크립트 엔진은 모든 선언문을 먼저 실행 후 선언문을 제외 한 소스를 실행한다. 변수와 함수 선언문이 코드의 맨 꼭대기로 끌어올려진것처럼 동작하는 특징이다. case 1) 실행한 결과는 ? undefined가 아닌 6이 나온다. case 2) 실행 결과는 undefined이다. 변수와 함수 선언문은 선언된 위치에서 코드의 꼭대기로 끌어올려진다. 함수와 변수 선언문은 모두 끌어올려지지만, 함수가 먼저 끌어올려지고 다음으로 변수가 올려진다. 변수의 선언 번수의 선언은 런타임 이전에 이루어지지만 값의 할당은 런타임 시점에 이루어진다. 상수 : 변수에 할당된 값을 변경할 수 없으면 변수가 아닌 상수이다. 변수의 재할당 변수에 값이 재할당되면 기존에 할당된 값은 가비지 콜렉터에 의해 메모리에서 해제된..
-
스코프(Scope)와 실행 컨텍스트Front-end/Javascript 2021. 4. 8. 12:17
스코프 : 변수를 저장하고 변수를 찾는 규칙 ES5까지의 자바스크립트는 전역공간을 제외하면 함수에 의해서만 스코프가 생성된다. (ES6에서는 블록스코프가 생겼다). 이러한 식별자의 유효범위를 안에서부터 바깥까지 차례로 검색하는것을 스코프 체인이라고 한다. ( LexicalEnvironmet의 outer) 1. var = a : 컴파일러는 렉싱을 통해 위의 구문을 토큰으로 쪼개고, 토큰을 파싱해 트리 구조로 만든다. 컴파일러는 a가 특정한 스코프 컬렉션안에 있다면 컴파일러는 선언을 하지않고, 스코프안에 존재하지 않으면 a를 스코프 컬렉션에 선언하라고 요청한다. 2. 그 후 컴파일러는 엔진이 a = 2 을 처리하기위해 실행할수있는 코드를 생성한다. 엔진은 스코프에 변수 a가 스코프에서 접근할수있는지 확인하고..
-
특수값 (Undefined, void, NaN, Infinity, -0..)Front-end/Javascript 2021. 4. 6. 23:18
undefined undefined 타입의 값은 undefined만 존재한다. 느슨한모드에서 전역스코프에서 undefined에 값을 할당 할 수 있고, 모드 상관없이 undefined라는 이름을 가지는 지역변수를 생성할 수 있다. (사용할 일이 없음) void void - 는결과값은 undefined로 만든다. void 0 이라고 쓰면 undefined 값을 나타ㅓ낸다. NaN, Infinity, -0 NaN : 수학 연산 시 피연산자가 하나라도 숫자가 아닐경우, 피연산자가 NaN인 경우 등 그 결과는 NaN ( Not A Number) NaN은 다른 NaN과도 같지않아서, Number.isNaN() 함수로 NaN 여부를 알 수 있다. ( 내장 유틸리티 isNaN을 사용하면 문자열도 true로 뱉어내기 ..
-
숫자Front-end/Javascript 2021. 4. 6. 22:23
Number 자바스크립트에서 숫자는 정수와 부동 소수점 숫자를 일컫는다. (최근에는 BigInt를 이용하여 Number가 나타낼수있는 숫자보다 더 큰 정수를 나타낼 수 있다. ) 정수 타입은 부동 소수점 값이 없는 값이다 ( 20.0은 정수 20) 아주 크거나 아주 작은 숫자는 지수형으로 표시한다. (메서드는 숫자를 지수 표기법으로 표기해 반환해주는 toExponential() 의 결과값과 동일) 숫자값은 Number.prototype 메서드로 접근할 수 있다. => toFixed(), toPrecision() 메서드 사용 가능 - 부동 소수점 숫자의 부작용 문제 0.4+ 0.2는 실제로는 0.6에 가까운숫자이며, 0.6은 아니다. Q. 0.4 + 0.2와 0.3을 비교하는 방법은 ? => Number...
-
프로토타입Front-end/Javascript 2021. 3. 30. 00:54
프로토타입 자바스크립트는 프로토타입 기반언어(prototype-based language) 다. 모든 객체들이 메소드와 속성들을 상속받기위해 프로토타입 객체(prototype object) 를 가진다는 뜻이다. 참조함으로써 상속받는 효과를 얻는다. ex) new 연산자로 생성한 인스턴스에는 __proto__가 생성되고, __proto__는 생성자 함수의 prototype 프로퍼티를 참조한다. prototype은 객체이며 이를 참조하는 __proto__ (dunder proto) 도 객체이다. prototype 객체 내부에는 인스턴스가 사용할 메서드를 저장하고 인스턴스에서도 숨겨진 __proto__ 프로퍼티를 통해 메스드들에 접근할 수 있게 된다. (ES5 명세에서는 dunder proto가 아니라 [[p..
-
자바스크립트의 호출스택,큐 그리고 이벤트루프Front-end/Javascript 2021. 3. 28. 21:57
"one thread == one call stack ==> one thing at a time. " 자바스크립트는 싱글 스레드 기반 언어이며, 힙,큐와 함께 구성하는 단일 콜스택을 가지며 자바스크립트 V8 내부에 구현되어있다. (스레드 : 프로그램이 작업을 완료하는데 사용할 수 있는 단일 프로세스. 각 작업은 순차적으로 실행된다.) 호출 스택 : 여러 함수들을 실행하는 스크립트에서 해당 위치를 추적하는 인터프리터를 위한 메커니즘. 함수 실행시, stack에 push를 하고, 실행이 종료됐을떄 (return받을때 ) popped out 을 거친다. 힙 : 선언된 변수들은 힙 내부에 할당된다. 큐 : 코드가 push되고 실행될때까지 기다리는 리스트. 이벤트루프 (메세지 큐와 콜스택을 관리한다) : 호출스택..
-
실행컨텍스트Front-end/Javascript 2021. 3. 27. 11:02
실행 컨텍스트 (Execution Context) 실행할 코드에 제공할 환경정보(식별자와 스코프) 를 모아놓은 객체이며, 콜스택에 쌓아올린 후 가장 위에 있는 컨텍스트와 관려있는 코드를 실행합니다. 실행컨텍스트의 종류 : 1. Global Execution Context 2. Functional Execution Context 3. Eval Context ES6명세에서는 실행 컨텍스트에 담기는 정보를 아래와 같이 정의합니다. Execution contexts contain the current evaluation state of code, a reference to the code (function) itself, and possibly references to the current lexical env..