Các câu lệnh và biểu thức là hai thuật ngữ rất quan trọng trong JavaScript. Với tần suất hai thuật ngữ này được sử dụng để mô tả mã JavaScript, điều quan trọng là phải hiểu ý nghĩa của chúng và sự khác biệt giữa hai thuật ngữ.
Biểu thức
Bất kỳ đơn vị mã nào có thể được đánh giá thành một giá trị là một biểu thức. Vì các biểu thức tạo ra các giá trị, chúng có thể xuất hiện ở bất cứ đâu trong một chương trình mà JavaScript mong đợi một giá trị như đối số của một lời mời chức năng. Theo tài liệu MDN, JavaScript có các loại biểu thức sau.
Biểu thức số học:
Biểu thức số học đánh giá một giá trị số. Các ví dụ bao gồm những điều sau đây
10; // Here 10 is an expression that is evaluated to the numeric value 10 by the JS interpreter10+13; // This is another expression that is evaluated to produce the numeric value 23
Biểu thức chuỗi:
Biểu thức chuỗi là các biểu thức đánh giá thành một chuỗi. Các ví dụ bao gồm những điều sau đây
'hello';
'hello' + 'world'; // evaluates to the string 'hello world'
Biểu thức hợp lý:
Các biểu thức đánh giá đến giá trị boolean true hoặc false được coi là biểu thức logic. Tập hợp các biểu thức này thường liên quan đến việc sử dụng các toán tử logic && [và], || [hoặc] và! [Không]. Những ví dụ bao gồm
10 > 9; // evaluates to boolean value true
10 < 20; // evaluates to boolean value false
true; //evaluates to boolean value true
a===20 && b===30; // evaluates to true or false based on the values of a and b
Biểu thức chính:
Biểu thức chính đề cập đến các biểu thức độc lập như giá trị theo nghĩa đen, một số từ khóa và giá trị biến nhất định. Các ví dụ bao gồm những điều sau đây
'hello world'; // A string literal
23; // A numeric literal
true; // Boolean value true
sum; // Value of variable sum
this; // A keyword that evaluates to the current object
Biểu thức bên trái:
Còn được gọi là Lvalues, các biểu thức bên trái là những biểu thức có thể xuất hiện ở phía bên trái của biểu thức gán. Ví dụ về các biểu thức bên trái bao gồm các biểu thức sau
// variables such as i and total
i = 10;
total = 0;// properties of objectsvar obj = {}; // an empty object with no properties
obj.x = 10; // an assignment expression// elements of arrays
array[0] = 20;
array[1] = 'hello';// Invalid left-hand-side errors
++[a+1]; // SyntaxError. Attempting to increment or decrement an expression that is not an lvalue will lead to errors.
Bây giờ chúng tôi đã đề cập đến những điều cơ bản của các biểu thức, hãy để Lặn đi sâu hơn một chút vào các biểu thức.
Biểu thức chuyển nhượng:
Khi các biểu thức sử dụng toán tử = để gán giá trị cho một biến, nó được gọi là biểu thức gán. Những ví dụ bao gồm
average = 55;var b = [a = 1]; // here the assignment expression [a = 1] evaluates to a value that is assigned to the variable b. b = [a = 1] is another assignment expression. var is not part of the expression.
Các toán tử = mong đợi một lvalue là toán hạng bên trái của nó. Giá trị của biểu thức gán là giá trị của toán hạng bên phải như 55 trong ví dụ trên. Là một tác dụng phụ, toán tử = gán giá trị ở phía bên phải cho giá trị ở phía bên trái.
Biểu hiện với tác dụng phụ:
Như chúng ta vừa thấy với các biểu thức gán, các biểu thức có tác dụng phụ là những biểu thức dẫn đến thay đổi hoặc tác dụng phụ như cài đặt hoặc sửa đổi giá trị của một biến thông qua toán tử gán =, gọi chức năng, tăng hoặc giảm giá trị của một biến .
sum = 20; // here sum is assigned the value of 20sum++; // increments the value of sum by 1function modify[]{
a *= 10;
}var a = 10;
modify[]; // modifies the value of a to 100.
Các câu lệnh
Một tuyên bố là một hướng dẫn để thực hiện một hành động cụ thể. Những hành động như vậy bao gồm tạo một biến hoặc một hàm, lặp lại thông qua một mảng các phần tử, đánh giá mã dựa trên một điều kiện cụ thể, v.v. Các chương trình JavaScript thực sự là một chuỗi các câu lệnh.
Báo cáo trong JavaScript có thể được phân loại thành các danh mục sau đây
Tuyên bố tuyên bố:
Loại câu lệnh như vậy tạo ra các biến và hàm bằng cách sử dụng các câu lệnh VAR và hàm tương ứng. Những ví dụ bao gồm
var sum;
var average;// In the following example, var total is the statement and total = 0 is an assignment expressionvar total = 0;// A function declaration statement function greet[message] {
console.log[message];
}
Báo cáo biểu thức:
Bất cứ nơi nào JavaScript mong đợi một tuyên bố, bạn cũng có thể viết một biểu thức. Những tuyên bố như vậy được gọi là câu lệnh biểu thức. Nhưng điều ngược lại không giữ được. Bạn không thể sử dụng một tuyên bố ở vị trí của một biểu thức.
var a = var b; // leads to an error cause you cannot use a statement in the place of an expressionvar a = [b = 1]; // since [b = 1] is an assignment expression and not a statement, this is a perfectly acceptable line of codeconsole.log[var a]; // results in error as you can pass only expressions as a function argument
Các biểu thức chính độc lập như các giá trị biến cũng có thể vượt qua như các câu lệnh tùy thuộc vào ngữ cảnh. Ví dụ về các câu lệnh biểu hiện bao gồm những điều sau
// In the following example, sum is an expression as it evaluates to the value held by sum but it can also pass off as a valid statement.sum;// An expression statement that evaluates an expression with side effectsb = 4+38;
Câu điều kiện:
Các câu lệnh có điều kiện thực thi các câu lệnh dựa trên giá trị của một biểu thức. Ví dụ về các câu lệnh có điều kiện bao gồm các câu lệnh if..else và chuyển đổi.
'hello';
'hello' + 'world'; // evaluates to the string 'hello world'
0Vòng lặp và nhảy:
Các câu lệnh lặp bao gồm các câu sau: while, do/while, for và for/in. Các câu lệnh Jump được sử dụng để làm cho trình thông dịch JavaScript nhảy đến một vị trí cụ thể trong chương trình. Ví dụ về báo cáo nhảy bao gồm phá vỡ, tiếp tục, trả lại và ném.
Chức năng Biểu thức vs Khai báo chức năng:
Một biểu thức chức năng, đặc biệt là một biểu thức chức năng được đặt tên và khai báo hàm có thể trông giống nhau nhưng hành vi của chúng rất khác nhau.
Biểu thức chức năng là một phần của biểu thức gán biến và có thể hoặc không chứa tên. Vì loại chức năng này xuất hiện sau toán tử gán =, nó được đánh giá là một biểu thức. Biểu thức chức năng thường được sử dụng để gán một hàm cho một biến. Biểu thức chức năng chỉ được đánh giá khi trình thông dịch đạt đến dòng mã có các biểu thức chức năng được đặt.
'hello';
'hello' + 'world'; // evaluates to the string 'hello world'
1Chỉ các biểu thức chức năng có thể được gọi ngay lập tức. Các loại biểu thức chức năng như vậy được gọi là biểu thức chức năng được gọi ngay lập tức [iife].
'hello';
'hello' + 'world'; // evaluates to the string 'hello world'
2Mặt khác, khai báo chức năng là các câu lệnh khi chúng thực hiện hành động tạo một biến có giá trị là của hàm. Tuyên bố chức năng thuộc danh mục tuyên bố khai báo. Ngoài ra, khai báo chức năng được nâng lên trên cùng của mã không giống như các biểu thức chức năng. Tuyên bố chức năng phải luôn được đặt tên và không thể ẩn danh.function declarations are statements as they perform the action of creating a variable whose value is that of the function. Function declaration falls under the category of declaration statements. Also, function declarations are hoisted to the top of the code unlike function expressions. Function declarations must always be named and cannot be anonymous.
'hello';
'hello' + 'world'; // evaluates to the string 'hello world'
3Để đọc sâu hơn về các câu lệnh so với biểu thức, vui lòng tham khảo các nguồn được liệt kê theo tài liệu tham khảo.
Người giới thiệu
- Mdn
- JavaScript: Hướng dẫn dứt khoát
- Bạn không biết JS
- //2ality.com/2012/09/expressions-vs-statements.html
- //medium.com/@danparkk/javascript-basics-lexical-grammar-expressions-operators-and-statements-d9a61c7e71a8