1. 고수준 언어(High-level)
개발자가 직접적으로 리소스(메모리, CPU)를 관리할 필요가 없다.
예: JavaScript와 Python
C 프로그램(저수준)처럼 빠르고 최적화되지는 않지만, 배우기가 쉽다.
2. 가비지 컬렉션(Garbage-collected)
오래되고 사용되지 않는 객체를 자동으로 제거하여 컴퓨터 메모리를 정리한다. 그래서 우리가 코드에서 수동으로 메모리를 관리할 필요가 없다.
3. 인터프리터 또는 즉시 컴파일(Interpreted or juin-in-time compiled)
모든 프로그램은 0과 1인 기계어로 작성되어야 한다. 하지만 이렇게 하면 이해하기 어려우니까, 0과 1을 추상화한 것이 바로 자바스크립트 코드이다.그런데 이 자바스크립트 코드를 컴퓨터가 읽으려면 결국 기계어로 변환해야 하는데 이것을 컴파일링이라고 부른다. 이 컴파일링은 자바스크립트 엔진 안에서 이루어진다.
4. 다중 패러다임(multi-paradigm)
패러다임이란 코드 구조화의 접근 방식과 사고방식을 말하는데, 코딩 스타일과 기술들을 정한다. 세가지가 있는데
1)절차적 프로그래밍(Procedural programming)
2)객체 지향 프로그래밍(Object-Oriented proramming(OOP))
3)함수형 프로그래밍(Functional programming(FP))
다른 언어들은 대부분 이거중에 하나의 특징을 가지는데 자바스크립트는 세가지 패러다임을 모두 지원한다.
5. 프로토타입 기반 객체 지향(Prototype-based object-oriented)
prmitive 값을 제외하고는 자바스크립트에서는 거의 모든 것이 객체이다. 배열도 객체인데, 배열에서 우리가 push 메서드로 배열을 변경할 수 있는 이유가 프로토타입 상속 때문이다.
6. 일급 함수(First class functions)
함수가 단순히 변수로 취급된다. 그래서 다른 함수에 전달할 수도 있고, 함수에서 반환이 함수로 될 수 도 있는것이다.
7. 동적타이핑(Dynamic)
따로 데이터 타입 정의가 없고 타입은 런타임에서 결정된다. 변수의 데이터 타입이 자동으로 변경이 된다.
8. 단일 스레드(Single-threaded) & Non-blocking event loop
동시성 모델(Concurrency model)이란 자바스크립트 엔진이 동시에 발생하는 여러 작업을 처리하는 방식인데, 자바스크립트는 단일 스레드에서 실행되므로 한 번에 한가지 일만 할 수 있다. 하지만 오래 걸리는 작업이 있을 경우 비동기가 되어야 하는데 이를 위해 이벤트 루프를 사용한다. 이벤트 루프는 오래 걸리는 작업을 백그라운드에서 실행하고, 작업이 완료되면 다시 메인 스레드로 돌려놓습니다.