Hướng dẫn when is javascript executed - javascript được thực thi khi nào

Trong bài viết này, chúng tôi sẽ tìm hiểu cách tệp .js được thực thi trên trình duyệt bằng cách sử dụng nhiều cách tiếp cận sau. Tham khảo lập trình phía máy chủ và phía máy khách, để biết kiến ​​thức chuyên sâu về JavaScript.

Làm thế nào là .js được thực hiện bởi trình duyệt?

Mỗi trình duyệt web đều đi kèm với một công cụ JavaScript cung cấp môi trường thời gian chạy JavaScript. Ví dụ: Google Chrome sử dụng động cơ V8 JavaScript, được phát triển bởi Lars Bak. V8 là một công cụ JavaScript nguồn mở được phát triển cho các trình duyệt web của Google Chrome và Chromium bởi Dự án Chromium.Lars Bak. V8 is an open-source JavaScript engine developed for Google Chrome and Chromium web browsers by The Chromium Project.Lars Bak. V8 is an open-source JavaScript engine developed for Google Chrome and Chromium web browsers by The Chromium Project.

Trình thông dịch tích hợp trình duyệt tìm kiếm cho TAG hoặc .JS & NBSP; tệp được liên kết với tệp HTML trong khi tải một trang web, sau đó bắt đầu diễn giải và thực thi.

<script src="app.js"></script>

4

<script src="app.js"></script>

5

<script src="app.js"></script>

6

<script src="app.js"></script>

7

<script src="app.js"></script>

8

<script src="app.js"></script>

9

<script src="app.js"></script>

8

app.js

1

<script src="app.js"></script>

4

app.js

3

<script src="app.js"></script>

6

app.js

5

<script src="app.js"></script>

0

app.js

7

<script src="app.js"></script>

2

app.js
7

app.js

7

app.js
8
app.js
7

app.js

7

<script src="app.js"></script>
0
app.js
7

Output:

Hướng dẫn when is javascript executed - javascript được thực thi khi nào

Cách tiếp cận 2: Sử dụng với tham số SRC SRC:

Syntax: 

<script src="app.js"></script>

Parameters:

  • SRC: Đường dẫn tệp cho tệp JavaScript file path for the JavaScript file file path for the JavaScript file

Để biết thêm về đường dẫn tệp tham khảo tên đường dẫn trong thư mục tệp.

Ví dụ: Dưới đây là mã JavaScript từ ví dụ trước, chúng tôi muốn thực thi mã này bằng cách tuân theo một cách tiếp cận riêng biệt khác. Chúng tôi sẽ tạo một tệp riêng biệt ứng dụng ứng dụng, và đặt mã bên dưới trong tệp này. Below is the Javascript code from the previous example, we want to execute this code by following a different separate approach. We will create a separate file “app.js“, and put the code below in this “.js” file. Below is the Javascript code from the previous example, we want to execute this code by following a different separate approach. We will create a separate file “app.js“, and put the code below in this “.js” file.

app.js

Bây giờ, chúng tôi sẽ sử dụng mã dưới đây để liên kết tệp ‘.js‘ với tệp HTML. Đối với nhiệm vụ này, chúng tôi sẽ sử dụng một thẻ nơi chúng tôi sẽ cung cấp đường dẫn tệp của tệp .js của chúng tôi trong tham số SRC. Theo cách này khi tệp HTML của chúng tôi bắt đầu được tải trong trình duyệt thì trình duyệt trình thông dịch tích hợp của trình duyệt tìm kiếm cho TAG hoặc .JS & NBSP; tệp được liên kết với tệp HTML, sau đó bắt đầu diễn giải và thực thi..js‘ file with the HTML file. For this task, we will use a .js‘ file with the HTML file. For this task, we will use a

app.js

7

app.js
8
app.js
7

app.js

7

<script src="app.js"></script>
0
app.js
7

Output:


Cách tiếp cận 2: Sử dụng với tham số SRC SRC:

SRC: Đường dẫn tệp cho tệp JavaScript file path for the JavaScript file

JavaScript là một ngôn ngữ đa hình, động lực với các loại và toán tử, các đối tượng tích hợp tiêu chuẩn và phương pháp. Cú pháp của nó dựa trên các ngôn ngữ Java và C - nhiều cấu trúc từ các ngôn ngữ đó cũng áp dụng cho JavaScript. JavaScript hỗ trợ lập trình hướng đối tượng với các nguyên mẫu và lớp đối tượng. Nó cũng hỗ trợ lập trình chức năng vì các chức năng là hạng nhất có thể dễ dàng tạo thông qua các biểu thức và được truyền xung quanh như bất kỳ đối tượng nào khác.

Trang này đóng vai trò là tổng quan nhanh về các tính năng ngôn ngữ JavaScript khác nhau, được viết cho người đọc có nền bằng các ngôn ngữ khác, chẳng hạn như C hoặc Java.

Loại dữ liệu

Hãy bắt đầu bằng cách nhìn vào các khối xây dựng của bất kỳ ngôn ngữ nào: các loại. Các chương trình JavaScript thao tác các giá trị và tất cả các giá trị đó thuộc về một loại. JavaScript cung cấp bảy loại nguyên thủy:

  • Số: Được sử dụng cho tất cả các giá trị số (số nguyên và điểm nổi) ngoại trừ các số nguyên rất lớn.
  • Bigint: Được sử dụng cho các số nguyên lớn tùy ý.
  • Chuỗi: Được sử dụng để lưu trữ văn bản.
  • Boolean:
    <script src="app.js"></script>
    6 và
    <script src="app.js"></script>
    7 - thường được sử dụng cho logic có điều kiện.
  • Biểu tượng: Được sử dụng để tạo các định danh độc đáo sẽ không va chạm.
  • Không xác định: Chỉ ra rằng một biến chưa được gán một giá trị.
  • NULL: Chỉ ra một giá trị có giá trị có chủ ý.

Mọi thứ khác được gọi là một đối tượng. Các loại đối tượng phổ biến bao gồm:

  • <script src="app.js"></script>
    8
  • <script src="app.js"></script>
    9
  • app.js
    0
  • app.js
    1
  • app.js
    2

Các chức năng không phải là cấu trúc dữ liệu đặc biệt trong JavaScript - chúng chỉ là một loại đối tượng đặc biệt có thể được gọi.

Số

JavaScript có hai loại số tích hợp: số và bigint.

Loại số là giá trị điểm nổi độ chính xác kép của IEEE 754 64 bit, có nghĩa là số nguyên có thể được biểu diễn một cách an toàn giữa-(253-1) và 253-1 mà không bị mất độ chính xác và số điểm nổi có thể được lưu trữ trong suốt thời gian Lên đến 1,79 × 10308. Trong các số, JavaScript không phân biệt giữa số điểm nổi và số nguyên.

<script src="app.js"></script>
1

Vì vậy, một số nguyên rõ ràng trong thực tế là một chiếc phao. Do mã hóa IEEE 754, đôi khi số học điểm nổi có thể không chính xác.

<script src="app.js"></script>
2

Đối với các hoạt động mong đợi các số nguyên, chẳng hạn như các hoạt động bitwise, số lượng sẽ được chuyển đổi thành số nguyên 32 bit.

Số chữ số cũng có thể có tiền tố để chỉ ra cơ sở (nhị phân, bát phân, thập phân hoặc thập lục phân) hoặc hậu tố số mũ.

<script src="app.js"></script>
3

Loại lớn là một số nguyên chiều dài tùy ý. Hành vi của nó tương tự như các loại số nguyên của C. Bigint được chỉ định với một số theo nghĩa đen và hậu tố

app.js
3.

<script src="app.js"></script>
4

Các toán tử số học tiêu chuẩn được hỗ trợ, bao gồm bổ sung, trừ, số học còn lại, v.v ... Bigint và số không thể được trộn lẫn trong các hoạt động số học.

Đối tượng

app.js
4 cung cấp các hàm và hằng số toán học tiêu chuẩn.

<script src="app.js"></script>
5

Có ba cách để chuyển đổi một chuỗi thành một số:

  • app.js
    5, phân tích chuỗi cho một số nguyên.
  • app.js
    6, phân tích chuỗi cho một số điểm nổi.
  • Hàm
    app.js
    7, phân tích một chuỗi như thể đó là một số theo nghĩa đen và hỗ trợ nhiều biểu diễn số khác nhau.

Bạn cũng có thể sử dụng Unary Plus

app.js
8 làm tốc ký cho
app.js
7.

Giá trị số cũng bao gồm

<script src="app.js"></script>
00 (viết tắt cho "không phải số") và
<script src="app.js"></script>
01. Nhiều hoạt động "Toán học không hợp lệ" sẽ trả về
<script src="app.js"></script>
00-ví dụ: nếu cố gắng phân tích chuỗi không phải là Numeric hoặc sử dụng
<script src="app.js"></script>
03 trên giá trị âm. Phân chia theo 0 tạo ra
<script src="app.js"></script>
01 (tích cực hoặc tiêu cực).

<script src="app.js"></script>
00 rất dễ lây lan: Nếu bạn cung cấp nó như một toán hạng cho bất kỳ hoạt động toán học nào, kết quả cũng sẽ là
<script src="app.js"></script>
00.
<script src="app.js"></script>
00 là giá trị duy nhất trong JavaScript không bằng chính nó (theo thông số kỹ thuật của IEEE 754).

Dây

Các chuỗi trong JavaScript là chuỗi các ký tự Unicode. Đây nên là tin tức đáng hoan nghênh cho bất cứ ai đã phải đối phó với quốc tế hóa. Chính xác hơn, chúng được mã hóa UTF-16.

<script src="app.js"></script>
6

Chuỗi có thể được viết bằng trích dẫn đơn hoặc đôi - JavaScript không có sự khác biệt giữa các ký tự và chuỗi. Nếu bạn muốn đại diện cho một ký tự duy nhất, bạn chỉ cần sử dụng một chuỗi bao gồm một ký tự duy nhất đó.

<script src="app.js"></script>
7

Để tìm độ dài của một chuỗi (trong các đơn vị mã), hãy truy cập thuộc tính

<script src="app.js"></script>
08 của nó.

Chuỗi có các phương thức tiện ích để thao tác chuỗi và truy cập thông tin về chuỗi. Bởi vì tất cả các nguyên thủy là bất biến theo thiết kế, các phương pháp này trả về các chuỗi mới.

Toán tử

app.js
8 bị quá tải cho các chuỗi: khi một trong các toán hạng là một chuỗi, nó thực hiện kết hợp chuỗi thay vì bổ sung số. Một cú pháp theo nghĩa đen của mẫu đặc biệt cho phép bạn viết các chuỗi với các biểu thức nhúng ngắn gọn hơn. Không giống như các chuỗi được nội suy của Python hoặc các chuỗi được nội suy của C#, các chữ cái mẫu sử dụng backticks (không phải là trích dẫn đơn hoặc kép).

<script src="app.js"></script>
8

Các loại khác

JavaScript phân biệt giữa

<script src="app.js"></script>
10, cho thấy một giá trị không có giá trị có chủ ý (và chỉ có thể truy cập được thông qua từ khóa
<script src="app.js"></script>
10) và
<script src="app.js"></script>
12, cho thấy sự vắng mặt của giá trị. Có nhiều cách để có được
<script src="app.js"></script>
12:

  • Một câu lệnh
    <script src="app.js"></script>
    14 không có giá trị (
    <script src="app.js"></script>
    15) ngầm trả về
    <script src="app.js"></script>
    12.
  • Truy cập thuộc tính đối tượng không tồn tại (
    <script src="app.js"></script>
    17) trả về
    <script src="app.js"></script>
    12.
  • Một khai báo biến mà không cần khởi tạo (
    <script src="app.js"></script>
    19) sẽ ngầm khởi tạo biến thành
    <script src="app.js"></script>
    12.

JavaScript có loại boolean, với các giá trị có thể

<script src="app.js"></script>
6 và
<script src="app.js"></script>
7 - cả hai đều là từ khóa. Bất kỳ giá trị nào cũng có thể được chuyển đổi thành Boolean theo các quy tắc sau:

  1. <script src="app.js"></script>
    7,
    <script src="app.js"></script>
    24, chuỗi trống (
    <script src="app.js"></script>
    25),
    <script src="app.js"></script>
    00,
    <script src="app.js"></script>
    10 và
    <script src="app.js"></script>
    12 đều trở thành
    <script src="app.js"></script>
    7.
  2. Tất cả các giá trị khác trở thành
    <script src="app.js"></script>
    6.

Bạn có thể thực hiện chuyển đổi này một cách rõ ràng bằng cách sử dụng hàm

<script src="app.js"></script>
31:

<script src="app.js"></script>
9

Tuy nhiên, điều này hiếm khi cần thiết, vì JavaScript sẽ âm thầm thực hiện chuyển đổi này khi nó mong đợi một boolean, chẳng hạn như trong một câu lệnh

<script src="app.js"></script>
32 (xem các cấu trúc điều khiển). Vì lý do này, đôi khi chúng ta nói về "sự thật" và "giả", có nghĩa là các giá trị trở thành
<script src="app.js"></script>
6 và
<script src="app.js"></script>
7, khi được sử dụng trong bối cảnh Boolean.

Các hoạt động boolean như

<script src="app.js"></script>
35 (logic và),
<script src="app.js"></script>
36 (logic hoặc) và
<script src="app.js"></script>
37 (logic không) được hỗ trợ; Xem các nhà khai thác.

Loại ký hiệu thường được sử dụng để tạo các định danh độc đáo. Mỗi biểu tượng được tạo ra với hàm

<script src="app.js"></script>
38 được đảm bảo là duy nhất. Ngoài ra, có các ký hiệu đã đăng ký, là các hằng số được chia sẻ và các biểu tượng nổi tiếng, được ngôn ngữ sử dụng làm "giao thức" cho các hoạt động nhất định. Bạn có thể đọc thêm về chúng trong tham chiếu biểu tượng.

Biến

Các biến trong JavaScript được khai báo bằng một trong ba từ khóa:

<script src="app.js"></script>
39,
<script src="app.js"></script>
40 hoặc
<script src="app.js"></script>
41.

<script src="app.js"></script>
39 cho phép bạn khai báo các biến cấp khối. Biến được khai báo có sẵn từ khối mà nó được đính kèm.

<script src="app.js"></script>
0

<script src="app.js"></script>
40 cho phép bạn khai báo các biến có giá trị không bao giờ có ý định thay đổi. Biến có sẵn từ khối mà nó được khai báo.

<script src="app.js"></script>
1

Một biến được khai báo với

<script src="app.js"></script>
40 không thể được chỉ định lại.

<script src="app.js"></script>
2

<script src="app.js"></script>
40 khai báo chỉ ngăn chặn việc chỉ định lại - chúng không ngăn chặn các đột biến của giá trị của biến, nếu đó là một đối tượng.

<script src="app.js"></script>
3

<script src="app.js"></script>
41 Tuyên bố có thể có những hành vi đáng ngạc nhiên (ví dụ, chúng không bị ảnh hưởng bởi khối) và chúng không được khuyến khích trong mã JavaScript hiện đại.

Nếu bạn khai báo một biến mà không gán bất kỳ giá trị nào cho nó, giá trị của nó là

<script src="app.js"></script>
12. Bạn không thể khai báo biến
<script src="app.js"></script>
40 mà không có trình khởi tạo, vì dù sao bạn cũng không thể thay đổi nó sau này.

<script src="app.js"></script>
39 và
<script src="app.js"></script>
40 Các biến đã tuyên bố vẫn chiếm toàn bộ phạm vi mà chúng được xác định và ở trong một khu vực được gọi là vùng chết tạm thời trước dòng khai báo thực tế. Điều này có một số tương tác thú vị với bóng thay đổi, không xảy ra trong các ngôn ngữ khác.

<script src="app.js"></script>
4

Trong hầu hết các ngôn ngữ khác, điều này sẽ đăng nhập "1" và "2", bởi vì trước dòng

<script src="app.js"></script>
51,
<script src="app.js"></script>
52 vẫn nên đề cập đến tham số
<script src="app.js"></script>
52 trong phạm vi trên. Trong JavaScript, vì mỗi tuyên bố chiếm toàn bộ phạm vi, điều này sẽ gây ra lỗi vào
<script src="app.js"></script>
54 đầu tiên: "Không thể truy cập 'X' trước khi khởi tạo". Để biết thêm thông tin, hãy xem trang tham chiếu của
<script src="app.js"></script>
39.

JavaScript được gõ động. Các loại (như được mô tả trong phần trước) chỉ được liên kết với các giá trị, nhưng không phải với các biến. Đối với các biến ____ 139 được tuyên bố, bạn luôn có thể thay đổi loại của nó thông qua việc phân công lại.

Người vận hành

Các toán tử số của JavaScript bao gồm

app.js
8,
<script src="app.js"></script>
58,
<script src="app.js"></script>
59,
<script src="app.js"></script>
60,
<script src="app.js"></script>
61 (phần còn lại) và
<script src="app.js"></script>
62 (số liệu). Các giá trị được gán bằng cách sử dụng
<script src="app.js"></script>
63. Mỗi toán tử nhị phân cũng có một đối tác gán hợp chất như
<script src="app.js"></script>
64 và
<script src="app.js"></script>
65, mở rộng đến
<script src="app.js"></script>
66.

Bạn có thể sử dụng

<script src="app.js"></script>
67 và
<script src="app.js"></script>
68 để tăng và giảm tương ứng. Chúng có thể được sử dụng như một toán tử tiền tố hoặc postfix.

Toán tử

app.js
8 cũng thực hiện nối chuỗi:

<script src="app.js"></script>
5

Nếu bạn thêm một chuỗi vào một số (hoặc giá trị khác), mọi thứ sẽ được chuyển đổi thành một chuỗi trước tiên. Điều này có thể khiến bạn thất vọng:

<script src="app.js"></script>
6

Thêm một chuỗi trống vào một cái gì đó là một cách hữu ích để chuyển đổi nó thành một chuỗi.

So sánh trong JavaScript có thể được thực hiện bằng cách sử dụng

<script src="app.js"></script>
70,
app.js
7,
<script src="app.js"></script>
72 và
<script src="app.js"></script>
73, hoạt động cho cả hai chuỗi và số. Đối với sự bình đẳng, toán tử công bằng kép thực hiện ép buộc loại nếu bạn cho nó các loại khác nhau, với kết quả đôi khi thú vị. Mặt khác, toán tử ba công bằng không cố gắng ép buộc loại và thường được ưa thích.

<script src="app.js"></script>
7

Công bằng kép và ba bình đẳng cũng có các đối tác bất bình đẳng của họ:

<script src="app.js"></script>
74 và
<script src="app.js"></script>
75.

JavaScript cũng có toán tử bitwise và toán tử logic. Đáng chú ý, các nhà khai thác logic không chỉ làm việc với các giá trị Boolean - chúng hoạt động theo "sự thật" của giá trị.

<script src="app.js"></script>
8

Các nhà khai thác

<script src="app.js"></script>
35 và
<script src="app.js"></script>
36 sử dụng logic ngắn mạch, điều đó có nghĩa là liệu họ sẽ thực thi toán hạng thứ hai của họ có phụ thuộc vào phần đầu tiên hay không. Điều này rất hữu ích để kiểm tra các đối tượng null trước khi truy cập các thuộc tính của chúng:

<script src="app.js"></script>
9

Hoặc cho các giá trị bộ nhớ đệm (khi các giá trị giả không hợp lệ):

<script src="app.js"></script>
0

Để biết danh sách toàn diện các nhà khai thác, hãy xem trang Hướng dẫn hoặc phần tham chiếu. Bạn có thể đặc biệt quan tâm đến sự ưu tiên của nhà điều hành.

Văn phạm

Ngữ pháp JavaScript rất giống với gia đình C. Có một vài điểm đáng nói:

  • Định danh có thể có các ký tự Unicode, nhưng chúng không thể là một trong những từ dành riêng.
  • Nhận xét thường là
    <script src="app.js"></script>
    78 hoặc
    <script src="app.js"></script>
    79, trong khi nhiều ngôn ngữ kịch bản khác như Perl, Python và Bash sử dụng
    <script src="app.js"></script>
    80.
  • Bán kết là tùy chọn trong JavaScript - ngôn ngữ tự động chèn chúng khi cần thiết. Tuy nhiên, có một số cảnh báo nhất định để coi chừng, vì không giống như Python, dấu chấm phẩy vẫn là một phần của cú pháp.

Để có cái nhìn sâu sắc về ngữ pháp JavaScript, hãy xem trang tham khảo cho ngữ pháp từ vựng.

Cấu trúc điều khiển

JavaScript có một bộ cấu trúc điều khiển tương tự với các ngôn ngữ khác trong họ C. Các tuyên bố có điều kiện được hỗ trợ bởi

<script src="app.js"></script>
32 và
<script src="app.js"></script>
82; Bạn có thể xâu chuỗi chúng lại với nhau:

<script src="app.js"></script>
1

JavaScript không có

<script src="app.js"></script>
83 và
<script src="app.js"></script>
84 thực sự chỉ là một nhánh
<script src="app.js"></script>
82 bao gồm một câu lệnh
<script src="app.js"></script>
32.

JavaScript có vòng lặp

<script src="app.js"></script>
87 và vòng lặp
<script src="app.js"></script>
88. Đầu tiên là tốt cho vòng lặp cơ bản; Thứ hai là cho các vòng lặp mà bạn muốn đảm bảo rằng phần thân của vòng lặp được thực thi ít nhất một lần:

<script src="app.js"></script>
2

Vòng lặp

<script src="app.js"></script>
89 của JavaScript giống như trong C và Java: nó cho phép bạn cung cấp thông tin điều khiển cho vòng lặp của bạn trên một dòng.

<script src="app.js"></script>
3

JavaScript cũng chứa hai vòng lặp nổi bật khác:

<script src="app.js"></script>
90, lặp đi lặp lại trên các vòng lặp, đáng chú ý nhất là các mảng và
<script src="app.js"></script>
91, truy cập tất cả các thuộc tính có thể tìm thấy của một đối tượng.

<script src="app.js"></script>
4

Câu lệnh

<script src="app.js"></script>
92 có thể được sử dụng cho nhiều nhánh dựa trên kiểm tra bình đẳng.

<script src="app.js"></script>
5

Tương tự như C, các mệnh đề Case về mặt khái niệm giống như các nhãn, vì vậy nếu bạn không thêm câu lệnh

<script src="app.js"></script>
93, việc thực thi sẽ "rơi vào" lên cấp độ tiếp theo. Tuy nhiên, chúng không thực sự là các bảng nhảy-bất kỳ biểu thức nào cũng có thể là một phần của mệnh đề
<script src="app.js"></script>
94, không chỉ là chuỗi hoặc chữ số, và chúng sẽ được đánh giá từng người một cho đến khi một giá trị phù hợp. So sánh diễn ra giữa hai người sử dụng toán tử
<script src="app.js"></script>
95.

Không giống như một số ngôn ngữ như rỉ sét, các cấu trúc dòng điều khiển là các câu trong JavaScript, có nghĩa là bạn không thể gán chúng cho một biến, như

<script src="app.js"></script>
96.

Lỗi JavaScript được xử lý bằng câu lệnh

<script src="app.js"></script>
97.

<script src="app.js"></script>
6

Lỗi có thể được ném bằng cách sử dụng câu lệnh

<script src="app.js"></script>
98. Nhiều hoạt động tích hợp cũng có thể ném là tốt.

<script src="app.js"></script>
7

Nói chung, bạn không thể nói loại lỗi bạn vừa bắt, bởi vì bất cứ điều gì có thể được ném từ câu lệnh

<script src="app.js"></script>
98. Tuy nhiên, bạn thường có thể giả sử đó là một ví dụ
app.js
2, như ví dụ trên. Có một số lớp con của
app.js
2 tích hợp, như
<script src="app.js"></script>
02 và
<script src="app.js"></script>
03, mà bạn có thể sử dụng để cung cấp thêm ngữ nghĩa về lỗi. Không có bắt được điều kiện trong JavaScript - nếu bạn chỉ muốn xử lý một loại lỗi, bạn cần bắt mọi thứ, xác định loại lỗi bằng cách sử dụng
<script src="app.js"></script>
04, sau đó tái hiện các trường hợp khác.

<script src="app.js"></script>
8

Nếu một lỗi không bị ảnh hưởng bởi bất kỳ

<script src="app.js"></script>
97 trong ngăn xếp cuộc gọi, chương trình sẽ thoát.

Để biết danh sách toàn diện các câu lệnh luồng kiểm soát, xem phần tham chiếu.

Các đối tượng

Các đối tượng JavaScript có thể được coi là bộ sưu tập các cặp giá trị khóa. Như vậy, chúng tương tự như:

  • Từ điển trong Python.
  • Băm ở Perl và Ruby.
  • Bảng băm trong C và C ++.
  • Hashmaps ở Java.
  • Mảng liên kết trong PHP.

Các đối tượng JavaScript là băm. Không giống như các đối tượng bằng các ngôn ngữ được đánh máy tĩnh, các đối tượng trong JavaScript không có hình dạng cố định-các thuộc tính có thể được thêm, xóa, đặt hàng lại, đột biến hoặc truy vấn động bất cứ lúc nào. Các phím đối tượng luôn là chuỗi hoặc ký hiệu - thậm chí các chỉ số mảng, là số nguyên theo kinh điển, thực sự là các chuỗi dưới mui xe.

Các đối tượng thường được tạo bằng cú pháp theo nghĩa đen:

<script src="app.js"></script>
9

Thuộc tính đối tượng có thể được truy cập bằng DOT (

<script src="app.js"></script>
06) hoặc dấu ngoặc (
<script src="app.js"></script>
07). Khi sử dụng ký hiệu dấu chấm, khóa phải là định danh hợp lệ. Mặt khác, dấu ngoặc cho phép lập chỉ mục đối tượng với giá trị khóa động.

<script src="app.js"></script>
0

Truy cập tài sản có thể được xích lại với nhau:

<script src="app.js"></script>
1

Các đối tượng luôn là tài liệu tham khảo, vì vậy trừ khi một cái gì đó đang sao chép rõ ràng đối tượng, các đột biến đến một đối tượng sẽ được nhìn thấy bên ngoài.

<script src="app.js"></script>
2

Điều này cũng có nghĩa là hai đối tượng được tạo riêng biệt sẽ không bao giờ bằng nhau (

<script src="app.js"></script>
75), bởi vì chúng là các tài liệu tham khảo khác nhau. Nếu bạn giữ hai tài liệu tham khảo của cùng một đối tượng, việc biến đổi người này sẽ có thể quan sát được thông qua người kia.

<script src="app.js"></script>
3

Để biết thêm về các đối tượng và nguyên mẫu, hãy xem trang tham chiếu

<script src="app.js"></script>
09. Để biết thêm thông tin về cú pháp khởi tạo đối tượng, hãy xem trang tham chiếu của nó.

Trang này đã bỏ qua tất cả các chi tiết về các nguyên mẫu đối tượng và kế thừa vì bạn thường có thể đạt được sự kế thừa với các lớp mà không cần chạm vào cơ chế cơ bản (mà bạn có thể đã nghe là trừu tượng). Để tìm hiểu về họ, xem kế thừa và chuỗi nguyên mẫu.

Mảng

Mảng trong JavaScript thực sự là một loại đối tượng đặc biệt. Chúng hoạt động rất giống các đối tượng thông thường (các thuộc tính số tự nhiên chỉ có thể được truy cập bằng cách sử dụng cú pháp

<script src="app.js"></script>
07) nhưng chúng có một thuộc tính ma thuật gọi là
<script src="app.js"></script>
08. Đây luôn là một chỉ số cao hơn chỉ số cao nhất trong mảng.

Các mảng thường được tạo bằng chữ mảng:

<script src="app.js"></script>
4

Các mảng JavaScript vẫn là đối tượng - bạn có thể gán bất kỳ thuộc tính nào cho chúng, bao gồm các chỉ số số tùy ý. "Phép thuật" duy nhất là

<script src="app.js"></script>
08 sẽ được tự động cập nhật khi bạn đặt một chỉ mục cụ thể.

<script src="app.js"></script>
5

Mảng chúng tôi nhận được ở trên được gọi là một mảng thưa thớt vì có các khe không có người ở ở giữa và sẽ khiến động cơ giảm tối thiểu từ một mảng đến bảng băm. Hãy chắc chắn rằng mảng của bạn là đông dân cư!

Lập chỉ mục ngoài giới hạn không ném. Nếu bạn truy vấn một chỉ mục mảng không tồn tại, bạn sẽ nhận được giá trị

<script src="app.js"></script>
12 trở lại:

<script src="app.js"></script>
6

Mảng có thể có bất kỳ yếu tố và có thể phát triển hoặc thu nhỏ tùy ý.

<script src="app.js"></script>
7

Các mảng có thể được lặp lại với vòng lặp

<script src="app.js"></script>
89, như bạn có thể trong các ngôn ngữ giống như C khác:

<script src="app.js"></script>
8

Hoặc, vì các mảng có thể sử dụng được, bạn có thể sử dụng vòng lặp

<script src="app.js"></script>
90, đồng nghĩa với cú pháp
<script src="app.js"></script>
16 của C ++/Java:

<script src="app.js"></script>
9

Mảng đi kèm với rất nhiều phương thức mảng. Nhiều người trong số họ sẽ lặp lại mảng - ví dụ,

<script src="app.js"></script>
17 sẽ áp dụng một cuộc gọi lại cho mọi phần tử mảng và trả về một mảng mới:

<script src="app.js"></script>
0

Chức năng

Cùng với các đối tượng, các chức năng là thành phần cốt lõi trong việc hiểu JavaScript. Tuyên bố chức năng cơ bản nhất trông như thế này:

<script src="app.js"></script>
1

Hàm JavaScript có thể mất 0 hoặc nhiều tham số. Cơ thể chức năng có thể chứa bao nhiêu câu nói tùy thích và có thể khai báo các biến riêng của nó là cục bộ cho hàm đó. Câu lệnh

<script src="app.js"></script>
14 có thể được sử dụng để trả về một giá trị bất cứ lúc nào, chấm dứt hàm. Nếu không sử dụng câu lệnh trả về (hoặc trả về trống không có giá trị), JavaScript trả về
<script src="app.js"></script>
12.

Các chức năng có thể được gọi với nhiều hoặc ít tham số hơn so với nó chỉ định. Nếu bạn gọi một hàm mà không chuyển các tham số mà nó mong đợi, chúng sẽ được đặt thành

<script src="app.js"></script>
12. Nếu bạn vượt qua nhiều tham số hơn mong đợi, hàm sẽ bỏ qua các tham số bổ sung.

<script src="app.js"></script>
2

Có một số cú pháp tham số khác có sẵn. Ví dụ, cú pháp tham số REST cho phép thu thập tất cả các tham số bổ sung được truyền bởi người gọi vào một mảng, tương tự như

<script src="app.js"></script>
21 của Python. (Vì JS không đặt tên tham số ở cấp ngôn ngữ, nên không có
<script src="app.js"></script>
22.)

<script src="app.js"></script>
3

Trong mã trên, biến

<script src="app.js"></script>
23 chứa tất cả các giá trị được truyền vào hàm.

Tham số còn lại sẽ lưu trữ tất cả các đối số sau khi được khai báo, nhưng không phải trước đó. tức là

<script src="app.js"></script>
24 sẽ lưu trữ giá trị đầu tiên được truyền vào hàm trong biến
<script src="app.js"></script>
25 và các đối số còn lại trong
<script src="app.js"></script>
23.

Nếu một hàm chấp nhận một danh sách các đối số và bạn đã giữ một mảng, bạn có thể sử dụng cú pháp lây lan trong lệnh gọi hàm để trải ra mảng dưới dạng danh sách các phần tử. Ví dụ:

<script src="app.js"></script>
27.

Chúng tôi đã đề cập rằng JavaScript không đặt tên cho các tham số. Tuy nhiên, có thể thực hiện chúng bằng cách sử dụng phá hủy đối tượng, cho phép các đối tượng được đóng gói và giải nén một cách thuận tiện.

<script src="app.js"></script>
4

Ngoài ra còn có cú pháp tham số mặc định, cho phép các tham số bị bỏ qua (hoặc các tham số được truyền là

<script src="app.js"></script>
12) có giá trị mặc định.

<script src="app.js"></script>
5

Chức năng ẩn danh

JavaScript cho phép bạn tạo các hàm ẩn danh - nghĩa là các chức năng không có tên. Trong thực tế, các hàm ẩn danh thường được sử dụng làm đối số cho các hàm khác, ngay lập tức được gán cho một biến có thể được sử dụng để gọi hàm hoặc được trả về từ một hàm khác.

<script src="app.js"></script>
6

Điều đó làm cho chức năng ẩn danh có thể được yêu cầu bằng cách gọi

<script src="app.js"></script>
29 với một số đối số - nghĩa là, nó tương đương về mặt ngữ nghĩa khi khai báo chức năng bằng cách sử dụng cú pháp khai báo ____230.

Có một cách khác để xác định các hàm ẩn danh - sử dụng biểu thức chức năng mũi tên.

<script src="app.js"></script>
7

Các hàm mũi tên không tương đương về mặt ngữ nghĩa với các biểu thức chức năng - để biết thêm thông tin, hãy xem trang tham chiếu của nó.

Có một cách khác mà các chức năng ẩn danh có thể hữu ích: nó có thể được khai báo đồng thời và được gọi trong một biểu thức duy nhất, được gọi là biểu thức chức năng được gọi ngay lập tức (iife):

<script src="app.js"></script>
8

Đối với các trường hợp sử dụng của IIFES, bạn có thể đọc các phương thức riêng tư mô phỏng với các đóng cửa.

Chức năng đệ quy

JavaScript cho phép bạn gọi các chức năng đệ quy. Điều này đặc biệt hữu ích để xử lý các cấu trúc cây, chẳng hạn như các cấu trúc được tìm thấy trong trình duyệt DOM.

<script src="app.js"></script>
9

Biểu thức chức năng cũng có thể được đặt tên, cho phép chúng được đệ quy.

app.js
0

Tên được cung cấp cho một biểu thức chức năng như trên chỉ có sẵn cho phạm vi riêng của hàm. Điều này cho phép tối ưu hóa nhiều hơn được thực hiện bởi động cơ và dẫn đến mã dễ đọc hơn. Tên cũng xuất hiện trong trình gỡ lỗi và một số dấu vết ngăn xếp, có thể giúp bạn tiết kiệm thời gian khi gỡ lỗi.

Nếu bạn đã quen với lập trình chức năng, hãy cẩn thận với ý nghĩa hiệu suất của đệ quy trong JavaScript. Mặc dù đặc tả ngôn ngữ chỉ định tối ưu hóa cuộc gọi đuôi, chỉ có JavaScriptCore (được Safari sử dụng) đã thực hiện nó, do khó khăn trong việc phục hồi dấu vết ngăn xếp và khả năng gỡ lỗi. Đối với đệ quy sâu, thay vào đó hãy xem xét sử dụng lần lặp để tránh tràn.

Chức năng là các đối tượng hạng nhất

Các hàm JavaScript là các đối tượng hạng nhất. Điều này có nghĩa là chúng có thể được gán cho các biến, được chuyển làm đối số cho các chức năng khác và được trả lại từ các chức năng khác. Ngoài ra, JavaScript hỗ trợ đóng cửa ngoài hộp mà không bắt giữ rõ ràng, cho phép bạn áp dụng các kiểu lập trình chức năng thuận tiện.

app.js
1

Lưu ý rằng các hàm JavaScript là các đối tượng của chính chúng - như mọi thứ khác trong JavaScript - và bạn có thể thêm hoặc thay đổi thuộc tính trên chúng giống như chúng ta đã thấy trước đó trong phần đối tượng.

Chức năng bên trong

Khai báo chức năng JavaScript được cho phép bên trong các chức năng khác. Một chi tiết quan trọng của các chức năng lồng nhau trong JavaScript là chúng có thể truy cập các biến trong phạm vi chức năng cha mẹ của họ:

app.js
2

Điều này cung cấp rất nhiều tiện ích trong việc viết mã có thể duy trì hơn. Nếu một hàm được gọi là dựa trên một hoặc hai chức năng khác không hữu ích cho bất kỳ phần nào khác trong mã của bạn, bạn có thể làm tổ các chức năng tiện ích đó bên trong nó. Điều này giữ cho số lượng các chức năng nằm trong phạm vi toàn cầu.

Đây cũng là một đối trọng tuyệt vời cho sự hấp dẫn của các biến toàn cầu. Khi viết mã phức tạp, thường rất hấp dẫn khi sử dụng các biến toàn cầu để chia sẻ các giá trị giữa nhiều hàm, dẫn đến mã khó duy trì. Các chức năng lồng nhau có thể chia sẻ các biến trong cha mẹ của chúng, vì vậy bạn có thể sử dụng cơ chế đó để kết hợp các hàm cùng nhau mà không làm ô nhiễm không gian tên toàn cầu của bạn.

Các lớp học

JavaScript cung cấp cú pháp lớp rất giống với các ngôn ngữ như Java.

app.js
3

Các lớp JavaScript chỉ là các chức năng phải được khởi tạo với toán tử

<script src="app.js"></script>
31. Mỗi khi một lớp được khởi tạo, nó sẽ trả về một đối tượng chứa các phương thức và thuộc tính mà lớp được chỉ định. Các lớp không thực thi bất kỳ tổ chức mã nào - ví dụ: bạn có thể có các chức năng trả về các lớp hoặc bạn có thể có nhiều lớp cho mỗi tệp. Dưới đây là một ví dụ về cách tạo ra sự tạo ra của một lớp: đó chỉ là một biểu thức được trả về từ một hàm mũi tên. Mô hình này được gọi là một mixin.

app.js
4

Các thuộc tính tĩnh được tạo bằng cách chi tiêu

<script src="app.js"></script>
32. Các thuộc tính riêng được tạo ra bằng cách chi tiêu một hàm băm
<script src="app.js"></script>
80 (không phải
<script src="app.js"></script>
34). Hash là một phần không thể thiếu của tên tài sản. .

Để có hướng dẫn chi tiết về các tính năng lớp khác nhau, bạn có thể đọc trang Hướng dẫn.

Lập trình không đồng bộ

JavaScript là một luồng đơn. Không có sự tương đồng; chỉ có sự đồng thời. Lập trình không đồng bộ được cung cấp bởi một vòng lặp sự kiện, cho phép một bộ nhiệm vụ được xếp hàng và bỏ phiếu để hoàn thành.

Có ba cách thành ngữ để viết mã không đồng bộ trong JavaScript:

  • Dựa trên gọi lại (chẳng hạn như
    <script src="app.js"></script>
    37)
  • <script src="app.js"></script>
    38-based
  • ________ 239/________ 240, đó là một đường cú pháp cho những lời hứa

Ví dụ: đây là cách hoạt động đọc tệp có thể trông giống như trong JavaScript:

app.js
5

Ngôn ngữ cốt lõi không chỉ định bất kỳ tính năng lập trình không đồng bộ nào, nhưng điều quan trọng là khi tương tác với môi trường bên ngoài - từ yêu cầu quyền của người dùng, tìm nạp dữ liệu, để đọc các tệp. Việc giữ các hoạt động có khả năng chạy dài Async đảm bảo rằng các quy trình khác vẫn có thể chạy trong khi chương trình này chờ đợi-ví dụ, trình duyệt sẽ không đóng băng trong khi chờ người dùng nhấp vào nút để cấp quyền.

Nếu bạn có giá trị không đồng bộ, không thể có được giá trị của nó một cách đồng bộ. Ví dụ: nếu bạn có một lời hứa, bạn chỉ có thể truy cập kết quả cuối cùng thông qua phương thức

<script src="app.js"></script>
41. Tương tự,
<script src="app.js"></script>
40 chỉ có thể được sử dụng trong bối cảnh không đồng bộ, thường là hàm async hoặc một mô -đun. Những lời hứa không bao giờ chặn - chỉ có logic tùy thuộc vào kết quả của lời hứa sẽ được hoãn lại; Mọi thứ khác tiếp tục thực hiện trong lúc này. Nếu bạn là một lập trình viên chức năng, bạn có thể nhận ra những lời hứa là các đơn vị có thể được ánh xạ bằng
<script src="app.js"></script>
41 (tuy nhiên, chúng không phải là đơn vị thích hợp vì chúng tự động được phát hành; tức là bạn không thể có
<script src="app.js"></script>
44).

Trên thực tế, mô hình đơn luồng đã biến Node.js trở thành một lựa chọn phổ biến cho lập trình phía máy chủ do IO không chặn của nó, khiến việc xử lý một số lượng lớn các yêu cầu cơ sở dữ liệu hoặc hệ thống tệp rất hiệu quả. Tuy nhiên, các nhiệm vụ liên kết CPU (chuyên sâu về mặt tính toán) đó là JavaScript thuần túy vẫn sẽ chặn luồng chính. Để đạt được sự tương đồng thực sự, bạn có thể cần sử dụng công nhân.

Để tìm hiểu thêm về lập trình không đồng bộ, bạn có thể đọc về việc sử dụng lời hứa hoặc làm theo hướng dẫn JavaScript không đồng bộ.

Mô -đun

JavaScript cũng chỉ định một hệ thống mô -đun được hỗ trợ bởi hầu hết các thời gian chạy. Một mô -đun thường là một tệp, được xác định bởi đường dẫn hoặc URL tệp của nó. Bạn có thể sử dụng các câu lệnh

<script src="app.js"></script>
45 và
<script src="app.js"></script>
46 để trao đổi dữ liệu giữa các mô -đun:

app.js
6

Không giống như Haskell, Python, Java, v.v., độ phân giải mô-đun JavaScript hoàn toàn được xác định bởi máy chủ-nó thường dựa trên các URL hoặc đường dẫn tệp, do đó, các đường dẫn tệp tương đối "chỉ hoạt động" và liên quan đến đường dẫn của mô-đun hiện tại thay vì một số đường dẫn gốc dự án .

Tuy nhiên, ngôn ngữ JavaScript không cung cấp các mô -đun thư viện tiêu chuẩn - tất cả các chức năng cốt lõi được cung cấp bởi các biến toàn cầu như

app.js
4 và
<script src="app.js"></script>
48 thay thế. Điều này là do lịch sử lâu dài của JavaScript thiếu một hệ thống mô -đun và thực tế là chọn vào hệ thống mô -đun liên quan đến một số thay đổi đối với thiết lập thời gian chạy.

Runtimes khác nhau có thể sử dụng các hệ thống mô -đun khác nhau. Ví dụ: Node.js sử dụng NPM Trình quản lý gói và chủ yếu dựa trên hệ thống tệp, trong khi DENO và trình duyệt dựa trên URL hoàn toàn và các mô-đun có thể được giải quyết từ URL HTTP.

Để biết thêm thông tin, xem trang Hướng dẫn mô -đun.

Ngôn ngữ và thời gian chạy

Trong suốt trang này, chúng tôi đã liên tục đề cập rằng một số tính năng nhất định là cấp ngôn ngữ trong khi các tính năng khác là cấp độ thời gian chạy.

JavaScript là một ngôn ngữ kịch bản đa năng. Thông số kỹ thuật ngôn ngữ cốt lõi tập trung vào logic tính toán thuần túy. Nó không liên quan đến bất kỳ đầu vào/đầu ra nào-trên thực tế, không có API cấp độ thời gian chạy thêm (đáng chú ý nhất là

<script src="app.js"></script>
49), hành vi của chương trình JavaScript là hoàn toàn không thể quan sát được.

Thời gian chạy, hoặc máy chủ, là thứ cung cấp dữ liệu cho công cụ JavaScript (phiên dịch), cung cấp các thuộc tính toàn cầu bổ sung và cung cấp móc cho động cơ tương tác với thế giới bên ngoài. Độ phân giải mô-đun, đọc dữ liệu, thông điệp in, gửi yêu cầu mạng, vv đều là các hoạt động cấp độ thời gian chạy. Kể từ khi thành lập, JavaScript đã được áp dụng trong các môi trường khác nhau, chẳng hạn như trình duyệt (cung cấp API như DOM), Node.js (cung cấp API như truy cập hệ thống tệp), v.v. Mục đích), ứng dụng di động, ứng dụng máy tính để bàn, ứng dụng phía máy chủ, không có hệ thống nhúng, và nhiều hơn nữa. Mặc dù bạn tìm hiểu về các tính năng cốt lõi của JavaScript, nhưng điều quan trọng là phải hiểu các tính năng do máy chủ cung cấp để đưa kiến ​​thức sử dụng. Ví dụ: bạn có thể đọc về tất cả các API nền tảng web, được triển khai bởi các trình duyệt và đôi khi không phải là trình duyệt.

Khám phá thêm

Trang này cung cấp một cái nhìn sâu sắc rất cơ bản về cách các tính năng JavaScript khác nhau so sánh với các ngôn ngữ khác. Nếu bạn muốn tìm hiểu thêm về chính ngôn ngữ và các sắc thái với từng tính năng, bạn có thể đọc hướng dẫn JavaScript và tham chiếu JavaScript.

Có một số phần thiết yếu của ngôn ngữ mà chúng tôi đã bỏ qua do không gian và sự phức tạp, nhưng bạn có thể tự mình khám phá:

  • Di truyền và chuỗi nguyên mẫu
  • Đóng cửa
  • Biểu cảm thường xuyên
  • Lặp đi lặp lại