You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/01-getting-started/1-intro/article.md
+67Lines changed: 67 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -24,26 +24,44 @@ Trình duyệt đã có sẵn một Javascript engine đôi khi được gọi l
24
24
25
25
Những engine khác nhau thì sẽ có những "tên mã" khác nhau. Chẳng hạn:
26
26
27
+
<<<<<<< HEAD
27
28
-[V8](https://vi.wikipedia.org/wiki/Chrome_V8) -- trong Chrome và Opera.
28
29
-[SpiderMonkey](https://en.wikipedia.org/wiki/SpiderMonkey) -- trong Firefox.
29
30
- ...Có một số tên mã khác như "Chakra" cho IE, "ChakraCore" cho Microsoft Edge, "Nitro" và "SquirrelFish" cho Safari v.v.
30
31
31
32
Nên ghi nhớ các thuật ngữ trên bởi vì chúng được sử dụng khá nhiều trong các bài viết dành cho nhà phát triển (developer) trên Internet, và cả chúng ta. Ví dụ, nếu "tính năng X được hỗ trợ bởi V8", vậy nó có lẽ sẽ hoạt động trên Chrome và Opera.
33
+
=======
34
+
-[V8](https://en.wikipedia.org/wiki/V8_(JavaScript_engine)) -- in Chrome, Opera and Edge.
35
+
-[SpiderMonkey](https://en.wikipedia.org/wiki/SpiderMonkey) -- in Firefox.
36
+
- ...There are other codenames like "Chakra" for IE, "JavaScriptCore", "Nitro" and "SquirrelFish" for Safari, etc.
37
+
38
+
The terms above are good to remember because they are used in developer articles on the internet. We'll use them too. For instance, if "a feature X is supported by V8", then it probably works in Chrome, Opera and Edge.
39
+
>>>>>>> 52c1e61915bc8970a950a3f59bd845827e49b4bf
32
40
33
41
```smart header="Engine hoạt động như thế nào?"
34
42
35
43
Engine khá phức tạp, tuy nhiên có thể hiểu đơn giản như sau:
36
44
45
+
<<<<<<< HEAD
37
46
1. Engine (được nhúng nếu là trình duyệt) đọc ("phân tích cú pháp") tập lệnh.
38
47
2. Tiếp theo nó chuyển đổi ("biên dịch") tập lệnh sang mã máy.
39
48
3. Và sau đó mã máy chạy, khá nhanh.
49
+
=======
50
+
1. The engine (embedded if it's a browser) reads ("parses") the script.
51
+
2. Then it converts ("compiles") the script to machine code.
52
+
3. And then the machine code runs, pretty fast.
53
+
>>>>>>> 52c1e61915bc8970a950a3f59bd845827e49b4bf
40
54
41
55
Engine áp dụng tối ưu hóa ở mỗi bước của quá trình. Nó thậm chí còn theo dõi tập lệnh đã biên dịch khi nó chạy, phân tích dữ liệu chạy qua nó và tối ưu hóa hơn nữa mã máy dựa trên kiến thức đó.
42
56
```
43
57
44
58
## JavaScript có thể làm gì trong trình duyệt?
45
59
60
+
<<<<<<< HEAD
46
61
Javascript hiện đại là một ngôn ngữ lập trình "an toàn". Nó không cung cấp quyền truy cập cấp thấp vào bộ nhớ hay CPU, bởi vì ban đầu nó được tạo ra cho trình duyệt vốn dĩ không yêu cầu những điều đó.
62
+
=======
63
+
Modern JavaScript is a "safe" programming language. It does not provide low-level access to memory or the CPU, because it was initially created for browsers which do not require it.
64
+
>>>>>>> 52c1e61915bc8970a950a3f59bd845827e49b4bf
47
65
48
66
Sức mạnh của Javascript phụ thuộc rất lớn vào môi trường mà nó đang hoạt động. Chẳng hạn, [Node.js](https://vi.wikipedia.org/wiki/Node.js) hỗ trợ các hàm giúp cho Javascript có thể đọc/ghi các tập tin tùy ý, thực hiện các yêu cầu mạng, etc.
49
67
@@ -59,14 +77,19 @@ Ví dụ, JavaScript trong trình duyệt có khả năng:
59
77
60
78
## JavaScript không thể làm gì trong trình duyệt?
61
79
80
+
<<<<<<< HEAD
62
81
Nhiều tính năng của Javascript trong trình duyệt bị giới hạn vì lợi ích an toàn của người dùng. Mục đích là để ngăn chặn những trang web độc hại truy cập thông tin cá nhân hoặc gây hại đến dữ liệu của người dùng.
82
+
=======
83
+
JavaScript's abilities in the browser are limited to protect the user's safety. The aim is to prevent an evil webpage from accessing private information or harming the user's data.
84
+
>>>>>>> 52c1e61915bc8970a950a3f59bd845827e49b4bf
63
85
64
86
Một số hạn chế có thể kể là:
65
87
66
88
- JavaScript trên một trang web không thể đọc/ghi các tệp tùy ý trên đĩa cứng, sao chép chúng hoặc thực thi các chương trình. Nó không có quyền truy cập trực tiếp vào các chức năng của hệ điều hành.
67
89
68
90
Nhiều trình duyệt hiện đại cho phép làm việc với tập tin, nhưng bị giới hạn và chỉ được truy cập nếu như người dùng thực hiện một hành động nhất định nào đó, ví dụ như "thả" các tập tin vào cửa sổ trình duyệt hoặc chọn chúng qua thẻ `<input>`.
69
91
92
+
<<<<<<< HEAD
70
93
Có nhiều cách để tương tác với camera/microphone và thiết bị khác, nhưng chúng yêu cầu sự cho phép rõ ràng của người dùng. Vì vậy, một trang web hỗ trợ Javascript sẽ không bật lén camera, quan sát và gửi thông tin cho [NSA](https://vi.wikipedia.org/wiki/C%C6%A1_quan_An_ninh_Qu%E1%BB%91c_gia_(Hoa_K%E1%BB%B3)).
71
94
- Các tab/cửa sổ nhìn chung không biết gì về nhau. Thỉnh thoảng có, ví dụ như một cửa sổ dùng Javascript để mở cửa sổ khác. Nhưng kể cả như vậy, JavaScript từ trang này vẫn không thể can thiệp vào trang kia nếu như chúng đến từ tên miền, giao thức hoặc port khác.
72
95
@@ -78,33 +101,61 @@ Một số hạn chế có thể kể là:
78
101

79
102
80
103
Những giới hạn trên sẽ không tồn tại nếu như Javascript được sử dụng bên ngoài trình duyệt, như máy chủ chẳng hạn. Các trình duyệt hiện đại cũng cho phép các plugin/tiện ích có thể hỏi cho các quyền mở rộng.
104
+
=======
105
+
There are ways to interact with the camera/microphone and other devices, but they require a user's explicit permission. So a JavaScript-enabled page may not sneakily enable a web-camera, observe the surroundings and send the information to the [NSA](https://en.wikipedia.org/wiki/National_Security_Agency).
106
+
- Different tabs/windows generally do not know about each other. Sometimes they do, for example when one window uses JavaScript to open the other one. But even in this case, JavaScript from one page may not access the other page if they come from different sites (from a different domain, protocol or port).
107
+
108
+
This is called the "Same Origin Policy". To work around that, *both pages* must agree for data exchange and must contain special JavaScript code that handles it. We'll cover that in the tutorial.
109
+
110
+
This limitation is, again, for the user's safety. A page from `http://anysite.com` which a user has opened must not be able to access another browser tab with the URL `http://gmail.com`, for example, and steal information from there.
111
+
- JavaScript can easily communicate over the net to the server where the current page came from. But its ability to receive data from other sites/domains is severely limited. Though possible, it requires explicit agreement (expressed in HTTP headers) from the remote side. Once again, that's a safety limitation.
112
+
113
+

114
+
115
+
Such limitations do not exist if JavaScript is used outside of the browser, for example on a server. Modern browsers also allow plugins/extensions which may ask for extended permissions.
116
+
>>>>>>> 52c1e61915bc8970a950a3f59bd845827e49b4bf
81
117
82
118
## Điều gì khiến cho Javascript khác biệt?
83
119
84
120
Có ít nhất *ba* điều tuyệt vời ở Javascript:
85
121
86
122
```compare
123
+
<<<<<<< HEAD
87
124
+ Tích hợp hoàn toàn với HTML/CSS.
88
125
+ Những điều đơn giản được thực hiện một cách đơn giản.
89
126
+ Được hỗ trợ bởi tất cả các trình duyệt chính và được bật theo mặc định.
127
+
=======
128
+
+ Full integration with HTML/CSS.
129
+
+ Simple things are done simply.
130
+
+ Supported by all major browsers and enabled by default.
131
+
>>>>>>> 52c1e61915bc8970a950a3f59bd845827e49b4bf
90
132
```
91
133
92
134
Javascript là công nghệ trình duyệt duy nhất kết hợp cả 3 điều trên.
93
135
136
+
<<<<<<< HEAD
94
137
Đó là những thứ khiến cho Javascript trở nên độc đáo. Đó là lí do tại sao nó là công cụ phổ biến nhất để tạo giao diện trình duyệt.
138
+
=======
139
+
That said, JavaScript can be used to create servers, mobile applications, etc.
140
+
>>>>>>> 52c1e61915bc8970a950a3f59bd845827e49b4bf
95
141
96
142
Điều đó nói rằng, JavaScript cũng cho phép tạo các ứng dụng di động, máy chủ v.v.
97
143
98
144
## Những ngôn ngữ "trên nền tảng" JavaScript
99
145
100
146
Cú pháp của Javascript không phù hợp cho tất cả mọi người. Những người khác nhau lại muốn các tính năng khác nhau.
101
147
148
+
<<<<<<< HEAD
102
149
Đó là điều được mong đợi, vì các dự án và yêu cầu đều khác nhau đối với mọi người.
150
+
=======
151
+
So, recently a plethora of new languages appeared, which are *transpiled* (converted) to JavaScript before they run in the browser.
152
+
>>>>>>> 52c1e61915bc8970a950a3f59bd845827e49b4bf
103
153
104
154
Vì vậy gần đây có rất nhiêu ngôn ngữ mới xuất hiện, chúng được *dịch mã* (chuyển đổi) sang Javascript trước khi chúng chạy trên trình duyệt.
105
155
106
156
Những công cụ hiện đại làm cho việc dịch trở nên nhanh chóng và minh bạch, thực sự cho phép các nhà phát triển viết mã bằng ngôn ngữ khác và tự động chuyển đổi nó trơn tru và hiệu quả.
107
157
158
+
<<<<<<< HEAD
108
159
Có thể kể đến một số ngôn ngữ:
109
160
110
161
-[CoffeeScript](http://coffeescript.org/) là một "cú pháp đặc biệt" cho JavaScript. Nó giới thiệu cú pháp ngắn hơn, cho phép chúng ta viết mã rõ ràng và chính xác hơn. Thông thường thì các nhà phát triển Ruby thích nó.
@@ -113,11 +164,27 @@ Có thể kể đến một số ngôn ngữ:
113
164
-[Dart](https://www.dartlang.org/) là một ngôn ngữ độc lập có engine riêng và có thể chạy trong môi trường khác ngoài trình duyệt, nó cũng có thể được dịch sang Javascript. Phát triển bởi Google.
114
165
-[Brython](https://brython.info/) là một trình chuyển tiếp Python sang JavaScript cho phép viết các ứng dụng bằng Python thuần túy mà không cần JavaScript.
115
166
-[Kotlin](https://kotlinlang.org/docs/reference/js-overview.html) là một ngôn ngữ lập trình hiện đại, ngắn gọn và an toàn, mà có thể nhắm đến trình duyệt hoặc Node.
167
+
=======
168
+
-[CoffeeScript](https://coffeescript.org/) is "syntactic sugar" for JavaScript. It introduces shorter syntax, allowing us to write clearer and more precise code. Usually, Ruby devs like it.
169
+
-[TypeScript](https://www.typescriptlang.org/) is concentrated on adding "strict data typing" to simplify the development and support of complex systems. It is developed by Microsoft.
170
+
-[Flow](https://flow.org/) also adds data typing, but in a different way. Developed by Facebook.
171
+
-[Dart](https://www.dartlang.org/) is a standalone language that has its own engine that runs in non-browser environments (like mobile apps), but also can be transpiled to JavaScript. Developed by Google.
172
+
-[Brython](https://brython.info/) is a Python transpiler to JavaScript that enables the writing of applications in pure Python without JavaScript.
173
+
-[Kotlin](https://kotlinlang.org/docs/reference/js-overview.html) is a modern, concise and safe programming language that can target the browser or Node.
174
+
175
+
There are more. Of course, even if we use one of these transpiled languages, we should also know JavaScript to really understand what we're doing.
176
+
>>>>>>> 52c1e61915bc8970a950a3f59bd845827e49b4bf
116
177
117
178
Sẽ có nhiều hơn số kể trên. Dĩ nhiên, ngay cả khi chúng ta sử dụng một trong những ngôn ngữ đó, chúng ta cũng nên biết Javascript để thực sự hiểu chúng ta đang làm gì.
118
179
180
+
<<<<<<< HEAD
119
181
## Tóm tắt
120
182
121
183
- Javascript được tạo ra với mục đích ban đầu chỉ cho trình duyệt, nhưng bây giờ đã được sử dụng rộng rãi trên nhiều môi trường khác.
122
184
- Ngày nay, Javascript có một vị trí khác biệt như là ngôn ngữ trình duyệt được sử dụng rộng rãi nhất với sự tích hợp đầy đủ với HTML/CSS.
123
185
- Có nhiều ngôn ngữ được "dịch" sang JavaScript và cung cấp một số tính năng nhất định. Nên xem qua chúng, ít nhất là một thời gian ngắn sau khi thành thạo JavaScript.
186
+
=======
187
+
- JavaScript was initially created as a browser-only language, but it is now used in many other environments as well.
188
+
- Today, JavaScript has a unique position as the most widely-adopted browser language, fully integrated with HTML/CSS.
189
+
- There are many languages that get "transpiled" to JavaScript and provide certain features. It is recommended to take a look at them, at least briefly, after mastering JavaScript.
Copy file name to clipboardExpand all lines: 1-js/01-getting-started/2-manuals-specifications/article.md
+21Lines changed: 21 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,15 +2,23 @@
2
2
3
3
Cuốn sách này là một *hướng dẫn*. Nó nhằm mục đích giúp bạn dần dần học ngôn ngữ. Nhưng một khi bạn quen với những thứ căn bản, bạn sẽ cần các nguồn khác.
4
4
5
+
<<<<<<< HEAD
5
6
## Đặc tả
7
+
=======
8
+
This book is a *tutorial*. It aims to help you gradually learn the language. But once you're familiar with the basics, you'll need other resources.
9
+
>>>>>>> 52c1e61915bc8970a950a3f59bd845827e49b4bf
6
10
7
11
[Đặc tả ECMA-262](https://www.ecma-international.org/publications/standards/Ecma-262.htm) chứa thông tin chuyên sâu, chi tiết và chính thức nhất về JavaScript. Nó xác định đặc điểm ngôn ngữ.
8
12
9
13
Nhưng với việc được chính thức hóa như vậy, thoạt đầu nó thật khó hiểu. Vì vậy, nếu bạn cần nguồn thông tin đáng tin cậy nhất về chi tiết ngôn ngữ, thì bản đặc tả là nơi phù hợp. Nhưng nó không phải để sử dụng hàng ngày.
10
14
11
15
Một phiên bản đặc tả mới được phát hành hàng năm. Giữa các bản phát hành này, bản nháp đặc tả mới nhất có tại <https://tc39.es/ecma262/>.
12
16
17
+
<<<<<<< HEAD
13
18
Để đọc về những tính năng mới nhất, bao gồm cả các tính năng gần như tiêu chuẩn (được gọi là "stage-3") xem tại: <https://github.com/tc39/proposals>.
19
+
=======
20
+
A new specification version is released every year. Between these releases, the latest specification draft is at <https://tc39.es/ecma262/>.
21
+
>>>>>>> 52c1e61915bc8970a950a3f59bd845827e49b4bf
14
22
15
23
Ngoài ra, nếu bạn đang phát triển cho trình duyệt, thì có các đặc tả khác được đề cập trong [phần thứ hai](info:browser-environment) của hướng dẫn.
16
24
@@ -20,18 +28,31 @@ Ngoài ra, nếu bạn đang phát triển cho trình duyệt, thì có các đ
20
28
21
29
Bạn có thể tìm thấy nó tại <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference>.
22
30
31
+
<<<<<<< HEAD
23
32
24
33
Dầu vậy, thông thường tốt nhất là sử dụng tìm kiếm trên Internet. Chỉ cần sử dụng "MDN [term]" trong truy vấn, ví dụ: <https://google.com/search?q=MDN+parseInt> để tìm kiếm hàm `parseInt`.
34
+
=======
35
+
You can find it at <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference>.
36
+
37
+
Although, it's often best to use an internet search instead. Just use "MDN [term]" in the query, e.g. <https://google.com/search?q=MDN+parseInt> to search for the `parseInt` function.
38
+
>>>>>>> 52c1e61915bc8970a950a3f59bd845827e49b4bf
25
39
26
40
## Bảng tương thích
27
41
28
42
JavaScript là một ngôn ngữ đang phát triển, các tính năng mới được bổ sung thường xuyên.
29
43
30
44
Để xem sự hỗ trợ chúng giữa các engine dựa trên trình duyệt và các engine khác, hãy xem:
31
45
46
+
<<<<<<< HEAD
32
47
-<http://caniuse.com> - các bảng hỗ trợ theo từng tính năng, ví dụ: để xem engine nào hỗ trợ các hàm mã hóa hiện đại: <http://caniuse.com/#feat=cryptography>.
33
48
-<https://kangax.github.io/compat-table> - một bảng với các tính năng và các engine mà có hoặc không hỗ trợ các tính năng đó.
34
49
35
50
Tất cả các tài nguyên này đều hữu ích cho việc phát triển trong đời thực, vì chúng chứa thông tin có giá trị về các chi tiết ngôn ngữ, sự hỗ trợ chúng v.v.
51
+
=======
52
+
-<https://caniuse.com> - per-feature tables of support, e.g. to see which engines support modern cryptography functions: <https://caniuse.com/#feat=cryptography>.
53
+
-<https://kangax.github.io/compat-table> - a table with language features and engines that support those or don't support.
54
+
55
+
All these resources are useful in real-life development, as they contain valuable information about language details, their support, etc.
56
+
>>>>>>> 52c1e61915bc8970a950a3f59bd845827e49b4bf
36
57
37
58
Vui lòng ghi nhớ những tài nguyên trên (hoặc trang này) trong các trường hợp bạn cần thông tin chuyên sâu về một tính năng cụ thể.
For Windows, there's also "Visual Studio", not to be confused with "Visual Studio Code". "Visual Studio" is a paid and mighty Windows-only editor, well-suited for the .NET platform. It's also good at JavaScript. There's also a free version [Visual Studio Community](https://www.visualstudio.com/vs/community/).
19
19
@@ -29,13 +29,11 @@ The main difference between a "lightweight editor" and an "IDE" is that an IDE w
29
29
30
30
In practice, lightweight editors may have a lot of plugins including directory-level syntax analyzers and autocompleters, so there's no strict border between a lightweight editor and an IDE.
31
31
32
-
The following options deserve your attention:
32
+
There are many options, for instance:
33
33
34
-
-[Atom](https://atom.io/) (cross-platform, free).
35
-
-[Visual Studio Code](https://code.visualstudio.com/) (cross-platform, free).
-[Vim](http://www.vim.org/) and [Emacs](https://www.gnu.org/software/emacs/) are also cool if you know how to use them.
36
+
-[Vim](https://www.vim.org/) and [Emacs](https://www.gnu.org/software/emacs/) are also cool if you know how to use them.
39
37
40
38
## Let's not argue
41
39
@@ -44,3 +42,8 @@ The editors in the lists above are those that either I or my friends whom I cons
44
42
There are other great editors in our big world. Please choose the one you like the most.
45
43
46
44
The choice of an editor, like any other tool, is individual and depends on your projects, habits, and personal preferences.
45
+
46
+
The author's personal opinion:
47
+
48
+
- I'd use [Visual Studio Code](https://code.visualstudio.com/) if I develop mostly frontend.
49
+
- Otherwise, if it's mostly another language/platform and partially frontend, then consider other editors, such as XCode (Mac), Visual Studio (Windows) or Jetbrains family (Webstorm, PHPStorm, RubyMine etc, depending on the language).
0 commit comments