: Js는 인터프리터 언어이기 때문에 JAVA와 같이 컴파일이 필요한 다른 프로그래밍 언어에 비해 시간이 적게 소요된다. 또한 클라이언트 스크립트이기 때문에 서버 연결에 드는 시간을 절약할 수 있어서 프로그램 실행 속도를 높인다.
: 현대의 모든 브라우저들은 JS를 지원하기 때문에, 사실상 우리는 js를 거의 모든 곳에서 발견할 수있다.
: 다른 프로그래밍 언어와 완벽하게 호환되기 때문에 개발자들이 다양한 애플리케이션을 만들 때 JS를 선호한다. 다른 웹페이지나 다른 프로그래밍 언어의 스크립트 안에 JS code를 임베드 할 수 있다.
: (클라이언트에서 동작하는 Js의 경우)서버로 데이터를 주고 받지 않아도 브라우저 자체에서 데이터 유효성 검사를 할 수 있다. 만약 데이터가 불일치 하는 경우, 전체 페이지를 새로고침하지 않고, 브라우저가 페이지의 일부만 업데이트 한다.
: 드래그 앤 드롭이나 슬라이더는 페이지에 풍부한 인터페이스를 제공한다. 이로 인해 웹페이지에서의 사용자 상호작용이 향상된다.
: npm 등을 통해 라이브러리를 추가할 수 있다. 이러한 풍부하고 잘 관리된 써스파티 라이브러리는 개발자로 하여금 빠르고 쉽게 JS application을 구축할 수 있도록 한다.
: 프론트엔드 뿐만 아니라 백엔드에서도 개발할 수 있다. (Node.js를 사용)
: 코드 길이를 줄임으로써 웹 어플리케이션의 성능을 향상시킨다. 이 코드에는 루프, DOM 접근 등 다양한 내장 기능을 사용함으로써 오버헤드가 적다.
: Js code는 user에게 보이기 때문에, 누군가가 악의적인 의도로 Js code를 사용할 수 도있다. 인증(authentification)없이 소스 코드를 사용하는 것이 이에 해당한다. 또한 데이터 보안을 손상시킬 수 있는 악성 코드를 웹사이트에 삽입하는 것은 매우 쉽다.
: 브라우저마다 JS를 해석(interpret)하는 방법은 제각기 다르다. 따라서, 코드를 배포하기 전에 다양한 플랫폼에서 잘 돌아가는지 시험해봐야한다. 또한 구형 브라우저는 새로운 기능을 지원하지 않는 경우가 있기 때문에 그 부분도 늘 확인해야 한다.
: 몇몇 HTML 에디터가 디버깅 기능을 제공하긴 하지만, C/C++ 에디터와 같은 다른 에디터에 있는 것처럼 유용하지는 않다. 또한, 브라우저는 에러를 보여주지 않기 때문에 개발자가 문제를 찾아내는 것 자체도 어렵다.
: Js는 단일 상속만 지원하고 다중 상속은 지원하지 않는다.
:Js는 64비트 부동소수점 숫자(64-bit-floating-point number)로 숫자를 저장하고, 연산자는 32비트 연산자(32-bit bitwise operands)에서 동작한다. 따라서, Js는 숫자를 32-bit signed integer로 변환하고, 그걸 기반으로 연산을 수행하고, 그 결과를 다시 Js숫자로 변환한다. 이러한 연속적인 변환은 시간을 많이 소요하기 때문에 스크립트를 실행하는 데 드는 시간을 늘리고, 스피드는 줄이게 된다.
: 코드에 에러가 딱 하나만 있어도 웹 사이트에서 동작하는 Js code가 완전히 렌더링을 중지해버린다. 사용자에게는 Js가 아예 없는 것처럼 보일 것이다. 그러나 브라우저는 이러한 에러에 매우 관대하다.
: JAVA나 TypeScript에는 클래스 내부에서만 쓰이는 속성과 메서드를 구별하는 private 이라는 키워드가 존재한다. 따라서 클래스에 정의된 속성이나 메서드에 private 딱지가 붙어있으면, 클래스 외부에서는 접근할 수 없다.
JavaScript에서는 private 이 있긴 하지만, 지원하는 브라우저가 별로 없다.
: OOP의 추상화는 속성과 메서드의 이름만 노출시켜 사용을 단순화함을 의미한다. 다시 말해, 인터페이스를 단순화함을 의미한다.
인터페이스를 명시적으로 작성해놓음으로써, 이 클래스가 메서드 이름이 의도한 대로 작동할 것임을 드러낸다. 또한 실질적인 구현은 공개하지 않고 사용법만 노출시킬 수 있다.
특히 이러한 인터페이스 기능은 스크립트가 외부에 공개되는 모듈(ex. API)일 때 유리하다.
하지만 JavaScript에는 이러한 인터페이스 기능이 없다.