Javascript, Node.js, CoffeeScript, Typescript, Babel, .... là gì?

Theo mình biết thì:

  • Javascript là một ngôn ngữ lập trình. Spec mới nhất của nó là ES2016
  • Javascript cần phải có Javascript engine để chạy: ví dụ V8 (của Chromium), Chakra (của MS Edge), SpiderMonkey (của Firefox),… có một cuộc chiến ngầm giữa mấy cái engine này đó đừng đùa :wink:
  • Node.js vs Browser (trình duyệt): cả 2 là runtime của Javascript, chứ không phải là một ngôn ngữ lập trình mới. Ở mỗi runtime thì có các Object riêng biệt cho nó. Ví dụ DOM API của browser, hay core module của Node.js
  • CoffeeScript, Typescript, Elm: là các ngôn ngữ sẽ được biên dịch về Javascript, bổ sung tính năng mà Javascript chưa có (do quá trình bổ sung cú pháp mới vào Javascript rất lâu, trải qua 5 bước)
  • Babel : có thể coi nó là một compiler của chính Javascript, biên dịch ES6 (hay các proposal) về ES5 để chạy được trên hầu hết các trình duyệt

Phù. Một vài cái tên cần biết khi nói tới Javascript. Mọi người thấy có gì sai sót thì bổ sung giúp mình nha

13 Likes

cc @Itachi_Citus giúp mình kiểm tra nhé. Mình viết bài này do thấy có nhiều nhầm lẫn quá :slight_smile:

2 Likes

Javascript là chuyên của @thangngoc89 rồi còn gì, mình không hiểu sâu bằng đâu :sweat_smile:.

2 Likes

Không dám nhận. Mình chỉ mới hiểu sơ qua về Javascript. Còn nhiều cái vẫn thắc mắc. Context vẫn chưa hiểu rõ

1 Like

Mình xin bổ sung theo góc độ của history:

1- JS được sinh ra để giúp các trang web trở nên động đậy (animation) và tương tác (interactive). Tên gốc của nó là EcmaScript (viết tắt là ES). Thế nên lúc đầu nó là ngôn ngữ dạng thông dịch. Specs mới nhất là ES8 (ES2017 http://www.2ality.com/2016/02/ecmascript-2017.html)

2- Ban đầu JS không cần engine gì để chạy cả vì lúc đó chỉ có mỗi browser cần parser JS code và JS lúc đó cũng đơn giản. Sau browser được chia thành các module: module parser JS (JS Engine), module parser HTML/CSS và render thành trang web (Gecko của Firefox, Webkit/Blink của Chrome), module UI (các nút back/…). Đa phần JS Engine giờ đều là JIT compiler, nên cho tốc độ thực thi rất tốt.

3- Node.JS là JS runtime environment, còn browser là app có khả năng chạy code JS. Gọi NodeJS là env vì nó có các thư viện, các biến môi trường mà nếu dùng code JS hoàn toàn có thể thay đổi, thêm mới, tương tác với môi trường được (NodeJS dùng v8 làm bộ compiler). Còn browser thì chỉ gọi là app thôi, và JS không chỉ làm việc với DOM API mà còn làm việc với File API (local storage, file upload), Geo API, History API (address bar),…

4- CoffeeScript, TypeScript, Elm thường được gọi là ngôn ngữ transpilation (chuyển đổi) vì level của TypeScript và JS là tương đương nhau, viết code JS trong TypeScript thì TS vẫn hiểu được. Còn compilation thường nói về việc chuyển sang ngôn ngữ bậc thấp hơn, ví dụ như JS Engine, nó chuyển code JS sang bytecode. Sự ra đời của những ngôn ngữ này bởi JS là loose-type nên code khá ngẫu hứng, khó check kiểu (type) -> chuyển sang các ngôn ngữ strong-type sẽ dễ code hơn, kiểm soát cũng dễ hơn. Ví dụ như #Kit, GWT sử dụng C# và Java sau đó transpile sang JS. Tương tự như vậy, CS, TS, Elm cũng giúp việc viết code strong-type (cú pháp gần tương tự JS nên dễ học hơn C#, Java), sau đó sẽ được transpile sang JS.

5- Babel: cũng là một transpilation tool, đồng thời là một polyfill giúp cho chuyển đổi các hàm mà ES6 có nhưng ES5 chưa có (những hàm này trên ES6 được viết bằng C++). Lý do là rất ít trình duyệt support full ES6 (trừ firefox) nên Babel sẽ cung cấp các hàm này viết bằng JS thuần.

Ngoài ra, để làm frontend các bạn cũng nên tìm hiểu thêm một số tool như:

  • Framework: AngularJS, VueJS
  • Task Runner Tool: Gulp, Grunt giúp cho việc tự động hoá một số tác vụ perf cho app như: minimize JS, CSS (webpack), obfucate (uglyJS, …), làm sprite ảnh, ghép các file svg vào 1 file, …
  • Một số Test FW (cả UnitTest lẫn Behaviour Test) như: Qunit, Mocha, Jasmine, PhantomJS …
  • Lint check.
9 Likes

thanks a @thangngoc89 hôm trước chỉnh giúp cái comment, bây h biết thêm đc mấy cái về JS rồi

Stack của em hay dùng:

  • ReactJS
  • Webpack làm module bundler
  • ESlint
  • PostCSS kèm với stylelint cho CSS
  • Test: AVA hoặc Mocha + Karma
2 Likes

Mình cũng hay dùng Karma ^^. Hi, cũng chưa nghiên cứu về ReactJS vì toàn hâm mộ đồ của Google (Polymer và Angular2). Sẽ cố gắng dành time nghiên cứu thêm về ReactJS nữa cho đủ bộ. Thank bạn.

1 Like

Còn em thì ko thích đồ của các ông lớn :)) em thích opensource nhỏ bên ngoài như Aurelia hơn :smile:

1 Like

Ecmascript nó là specification - giống như bản thiết kế, còn javascript là 1 implementation dựa trên bản thiết kế đó thôi.

1 Like

API của ReactJS thì rất nhỏ và dễ học. Nhưng mà làm app hoàn chỉnh thì phải nghiên cứu ecosystem của nó (rất lớn) và đứng trước nhiều quyết định nếu không có kinh nghiệm thì dễ chọn sai. Ví dụ Redux vs Mobx vs Replay, …

1 Like

Cái này mình nhầm. Tên gốc của nó là Mocha -> LiveScript -> Javascript (ăn theo Java lúc đó đang thịnh hành). Thực ra hiện giờ cái tên Javascript lại là trade mark của Oracle.

6 Likes

Hype/trend giờ nhiều vô kể. Mỗi ngày ra 1 FW JS, mình viết app cho khách hàng nên không thể chọn 1 cái không có tương lai được. Sau này cần maintain, fix,… chả biết bấu vào ai ^^

1 Like

A post was split to a new topic: Chạy react bằng webpack và babel bị lỗi Error: Plugin/Preset files are not allowed to export objects, only functions

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?