자바스크립트 (이하 JS) 에서 타입이란 JS 엔진, 개발자 모두에게 어떤 값을 다른 값과 분별할 수 있는, 고유한 내부 특성의 집합으로 정의할 수 있습니다.예를 들면, 24와 "24" 라는 값은 다르게 취급됩니다. 24는 수학 연산 같이 계산을 하려는 의도가 있지만
자바스크립트 (이하 JS) 배열은 타입이 엄격한 다른 언어와 달리 어떤 타입의 값도 담을 수 있는 상자입니다.여기서 주의할 점은 슬롯을 건너뛸 수 있다는 점입니다.1번째 인덱스에 값을 넣지 않고 2번째 인덱스에 값을 넣는 경우에는 a1은 undefined면서 arr 배
String()Number()Boolean()Array()Object()Function()RegExp()Date()Error()Symbol()생성자처럼 사용할 수 있지만 생성되는 결과물은 예상과는 조금 다를 수 있습니다.new String("abc") 생성자의 결과는
어떤 값을 다른 타입의 값으로 바꾸는 과정이 명시적이면 타입 캐스팅이라 부르고 암시적이면 강제변환이라고 합니다.자바스크립트 (이하 JS)에서는 대부분 모든 유형의 타입변환을 강제변환으로 일컫는 경향이 있으므로 '암시적 강제변환'과 '명시적 강제변환' 두 가지로 구별하려
문 (statement)과 표현식(expression)을 같은 의미라고 넘겨버리는 개발자가 많습니다. 하지만, 자바스크립트 (이하 JS)에서 두 용어는 다릅니다.문은 문장, 표현식은 어구, 연산자는 구두점/접속사로 비유할 수 있습니다.여기서 3 \* 6은 표현식입니다.
자바스크립트 (이하 JS)는 일반적으로 동적 언어 또는 인터프리터 언어로 분류하나 사실은 컴파일러 언어입니다.JS 엔진은 전통적인 컴파일러 언어에서 컴파일러가 하는 일의 상당 부분을 우리가 아는 것보다 세련된 방식을 처리해줍니다.전통적인 컴파일러 언어의 처리 과정에서는
스코프 안에 있는 모든 변수와 함수는 그 스코프에 속합니다.foo()의 스코프 버블은 변수 a, b, c와 함수 bar를 포함합니다. 즉, 스코프 안에 있는 모든 변수와 함수는 그 스코프 버블에 속합니다.함수 스코프는 모든 변수가 함수에 속하고 함수 전체에 걸쳐 사용되
다음의 결과값은 undefined가 아니라 놀랍게도 2입니다.이 코드의 결과값은 undefined입니다.이런 결과가 나오는 이유는 호이스팅 때문입니다.var a;는 선언문이고 a = 2는 대입문입니다.따라서, 맨 위의 코드는 var a;가 호이스팅에 의해서 가장 위로
클로저는 렉시컬 스코프에 의존해 코드를 작성한 결과로 그냥 발생합니다.여기서, 렉시컬 스코프란 개발자가 코드를 작성할 때 함수를 어디에 선언하는지에 따라 정의되는 스코프입니다.모든 코드에서 클로저는 생성되고 사용됩니다.함수 bar()는 렉시컬 스코프 검색 규칙을 통해
this는 어떤 식으로도 함수의 렉시컬 스코프를 참조하지 않습니다.foo()와 bar()의 렉시컬 스코프 사이에 어떤 연결 통로를 만들어서 bar가 foo의 내부 스코프에 있는 변수 a에 접근하게 하고 싶지만 그건 불가능합니다.this는 작성 시점이 아닌 런타임 시점에
객체는 선언적 형식과 생성적 형식, 두 가지로 정의합니다.두 형식 모두 결과적으로 생성되는 객체는 같습니다. 유일한 차이점은 리터럴 형식은 한 번의 선언으로 다수의 key - value 쌍을 프로퍼티로 추가할 수 있지만, 생성자 형식은 한 번에 한 프로퍼티만 추가할 수
클래스는 특정 자료 구조를 분류하는 용도로 사용됩니다.예를 들면, Vehicle 클래스와 Car 클래스는 서로 상속관계로서, Vehicle은 엔진 등의 추진 기관과 사람 등을 운송하는 기능을 함께 정의합니다. Car는 Vehicle의 기반 정의를 상속 받아 정의하여 세
자바스크립트 (이하 JS) 객체에는 \[Prototype]이라는 내부 프로퍼티가 있고 다른 객체를 참조하는 단순 레퍼런스로 사용됩니다.myObj는 otherObj와 \[Prototype]이 링크됩니다. myObj.a란 프로퍼티는 없지만 otherObj에서 2라는 값을
이 게시글은 기존의 클래스/상속 디자인 패턴에서 작동 위임 디자인 패턴으로 사고방식을 바꾸기 위함입니다.클래스 지향과 대비하여 객체를 다른 객체에 연결하는 코드 스타일을 OLOO (Objects Linked to Other Objects)라고 지칭하겠습니다. 이 코드
프로그래밍 세계에서 '나중'은 '지금'의 직후가 아닙니다.주제에 본격적으로 들어가기에 앞서, 우리가 비동기 요청을 주로 보낼 때 사용하는 AJAX에서 콜백 문제를 피하려고 중단적/동기적 AJAX를 사용하는 행위는 정당화할 수 없음을 앞서 밝힙니다.이 코드에서 나중에 실
콜백은 자바스크립트 (이하 JS)에서 비동기성을 표현하는 기본 단위입니다.A와 B는 지금 당장, C는 나중에 실행됩니다.콜백 함수는 이 나중에 실행되는 함수를 의미하며 프로그램의 연속성을 감싼/캡슐화한 장치입니다.두뇌는 병렬 멀티스레딩이 불가능합니다.우리의 신경은 병렬
프라미스가 나오기 이전에는 콜백으로 비동기성을 다뤘습니다. 하지만 콜백으로 프로그램의 비동기성을 표현하고 동시성을 다루면 순차성과 믿음성이 결여되는 중요한 결함이 있습니다.그리고 제어의 역전이라는 치명적인 문제가 있습니다.우리는 x + y 연산을 할 때 당연히 x, y
자바스크립트 (이하 JS)에서는 이제껏 당연히 일단 함수가 실행되기 시작하면 완료될 때까지 계속 실행되며 도중에 다른 코드가 끼어들어 실행되는 법은 없었습니다.하지만, ES6부터 이러한 완전 실행 법칙을 따르지 않는, 제너레이터라는 전혀 새로운 종류의 함수가 등장하였습
DOM (Document Object Model)은 HTML 요소를 Object처럼 다룰 수 있는 Model입니다.우리는 Javascript를 사용한다면 DOM으로 HTML을 조작할 수 있습니다.DOM을 조작할 수 있는 주요 메서드와 개념을 살펴보도록 하겠습니다.새로운
웹 개발 초기와 달리 현재의 웹 개발은 훨씬 복잡해지고 인터랙티브 해졌습니다. 그렇기 때문에 초기의 방식을 사용하게 되면변수 이름의 충돌 가능성많은 js 파일 다운로드로 인한 네트워크 부하수동적인 반복 작업 (파일, 이미지 압축 등)위와 같은 부작용이 발생하였습니다.그
async 함수는 Promise 객체를 반환합니다.async 함수 내에서 반환되는 부분 이외의 로직은 바로 실행됩니다.async 함수 바깥의 동기적인 코드들이 모두 실행됩니다.async 함수에서 프라미스 객체를 반환합니다. (만약, chaining으로 .then 또는
정규표현식이란 정규표현식의 사전적 정의는 '특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어' 입니다. 간단하게 말하자면, '문자열의 패턴을 표현한 식' 입니다. 어떠한 규칙을 만족하는 문자열을 찾거나, 만족하는지 확인하거나, 대체하거나, 치환하는