라벨이 undefined인 게시물 표시

[JavaScript] undefined 이해하기

JavaScript에는 3가지 undefined가 존재한다. 타입으로서의 undefined 우선 undefined 는 타입이다. ECMA Script 5까지는 다음과 같은 6가지 1) Built-in type이 있었다. number boolean string object null undefined undefined는 그중 하나다. 값으로서의 undefined undefined 는 undefined 타입의 유일한 값이다. 우선 값이 할당되지 않은 변수 혹은 값이 할당되지 않은 프로퍼티는 undefined 가 된다. 또한, 리턴문이 없는 함수나 리턴하는 값이 없는 리턴문으로 끝나는 함수의 실행 결과도 undefined 가 된다. 혹은 전역 프로퍼티인 undefined 를 통해서 undefined 값을 얻을 수 있다. 전역 프로퍼티 undefined global context에는 undefined 라는 이름의 프로퍼티가 설정되어 있다. 이 undefined 는 undefined 인 값을 가진다. ECMAScript 5 이후로 이 프로퍼티는 non-configurable이고, non-writable로 설정되어 있다. 따라서 변경할 수 없다. 1) ECMAScript 6에는 Symbol type 이 추가되었다.

[CoffeeScript] undefined를 void 0로 compile하는 이유는 무엇일까

요새 재미삼아 만들고 있는 웹 프로그램이 있다. JavaScript를 약간 하드하게 사용하여야 하므로, pure한 JavaScript를 사용하지 않고, CoffeeScript를 이용하여 개발을 진행하고 있다. CoffeeScript 자체를 실행시키는 interpreter가 존재하지 않고, 언제나 JavaScript로 compile한 뒤 실행되어야 해서, 빠르게 코드 수정 내용을 테스트할 수 있다는 장점이 사라진다. 변환되는 과정에서 어떤 경우는 JavaScript로 직접 작성한 코드보다 비효율적인 코드가 나오기도 한다. 게다가 CoffeeScript는 기본적으로 모든 JavaScript 코드는 CoffeeScript 코드로, CoffeeScript 코드는 JavaScript 코드로 1:1로 변환 가능하게 해주는 것을 목표로 삼고 있기 때문에, JavaScript보다 더 powerful한 것도 아니다. 그럼에도 새 프로젝트에 JavaScript를 사용하지 않고 CoffeeScript를 사용하는 것은 다음의 두 가지 이유 때문이다. 우선 내가 c-style의 코드보다 ruby-style의 코드를 더 좋아한다. 별거 아니지만 오랜 시간 아무런 이득도 없이(쉽게 말해서 돈 받는 게 아니면서) 혼자서 쓸쓸히 작업하려면 내가 좋아하는 방식으로 작업하는 게 최고다. 다음으로 compile과정을 거치기 때문에 실수를 한번 걸러줄 수 있다. compile 과정에서 엄격한 정적 분석을 거치는 것은 아니지만, 기본적인 실수를 막아주는 역할 정도는 할 수 있다. CoffeeScript가 undefined 를 void 0 로 compile하는 이유도 여기에 있다. 위와 같이 undefined 를 사용하는 CoffeeScript 코드를 컴파일하면, 아래와 같이 undefined 를 void 0 로 변환한 JavaScript 코드를 돌려준다. void 함수는 분명히 언제나 undefined 를 return 하기는 하지만 굳이 멀쩡한 undefined 를 놔두고 v

이 블로그의 인기 게시물

[C++] enum class - 안전하고 쓰기 쉬운 enum

RAII는 무엇인가

Log Aggregator 비교 - Scribe, Flume, Fluentd, logstash

[Python] cache 데코레이터로 최적화하기

[Web] SpeechSynthesis - TTS API